ที่มา: โพสต์บล็อกของฉัน (การจัดรูปแบบที่ดีขึ้น)
ตัวอย่าง
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
อินพุต
iterables เป็นศูนย์หรือมากกว่านั้น [1] (เช่นรายการ, สตริง, tuple, พจนานุกรม)
เอาท์พุท (รายการ)
1st tuple = (element_1 ของตัวเลข, element_1 ของตัวอักษร)
tuple ตัวที่สอง = (ตัวเลข e_2, ตัวอักษร e_2)
...
n-th tuple = (ตัวเลข e_n, ตัวอักษร e_n)
- รายการของ tuples n: n คือความยาวของอาร์กิวเมนต์ที่สั้นที่สุด (อินพุต)
- len (ตัวเลข) == 3 <len (ตัวอักษร) == 4 → short = 3 → return 3 tuples
- ความยาวแต่ละ tuple = # ของ args (tuple ใช้องค์ประกอบจากแต่ละ ARG)
- args = (ตัวเลขตัวอักษร); len (args) == 2 → tuple พร้อม 2 องค์ประกอบ
i
th tuple = (element_i arg1, element_i arg2 …, element_i arg n
)
คดีขอบ
1) สตริงว่าง: len (str) = 0 = ไม่มี tuples
2) สตริงเดี่ยว: len (str) == 2 tuples พร้อม len (args) == 1 องค์ประกอบ
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
Zip in Action!
1. สร้างพจนานุกรม [2] จากสองรายการ
keys = ["drink","band","food"]
values = ["La Croix", "Daft Punk", "Sushi"]
my_favorite = dict( zip(keys, values) )
my_favorite["drink"]
# 'La Croix'
my_faves = dict()
for i in range(len(keys)):
my_faves[keys[i]] = values[i]
zip
เป็นโซลูชันที่หรูหราชัดเจนและรัดกุม
2. พิมพ์คอลัมน์ในตาราง
"*" [3] เรียกว่า "กำลังเปิดกล่องบรรจุ": f(*[arg1,arg2,arg3]) == f(arg1, arg2, arg3)
student_grades = [
[ 'Morty' , 1 , "B" ],
[ 'Rick' , 4 , "A" ],
[ 'Jerry' , 3 , "M" ],
[ 'Kramer' , 0 , "F" ],
]
row_1 = student_grades[0]
print row_1
# ['Morty', 1, 'B']
columns = zip(*student_grades)
names = columns[0]
print names
# ('Morty', 'Rick', 'Jerry', 'Kramer')
เครดิตพิเศษ: การขยายไฟล์
zip(*args)
เรียกว่า "การขยายไฟล์" เนื่องจากมีผลในทางกลับกัน zip
numbers = (1,2,3)
letters = ('a','b','c')
zipped = zip(numbers, letters)
print zipped
# [(1, 'a'), (2, 'b'), (3, 'c')]
unzipped = zip(*zipped)
print unzipped
# [(1, 2, 3), ('a', 'b', 'c')]
unzipped
: tuple_1 = e1 ของ tuple ซิปแต่ละอัน tuple_2 = e2 ของแต่ละรายการzipped
เชิงอรรถ
- วัตถุที่สามารถส่งคืนสมาชิกได้ครั้งละหนึ่งรายการ (เช่นรายการ [1,2,3] สตริง 'I like codin', tuple (1,2,3), พจนานุกรม {'a': 1, 'b' : 2})
- {key1: value1, key2: value2 ... }
- “ กำลังแกะกล่อง” (*)
*
รหัส:
# foo - function, returns sum of two arguments
def foo(x,y):
return x + y
print foo(3,4)
# 7
numbers = [1,2]
print foo(numbers)
# TypeError: foo() takes exactly 2 arguments (1 given)
print foo(*numbers)
# 3
*
เอาnumbers
(1 arg) และ“ คลายไฟล์” องค์ประกอบที่ 2 ออกเป็น 2 ส่วน
zip
จะทำอะไรกันแน่? ทำไมคุณควรมีสามรายการ - พวกเขาจะมีลักษณะอย่างไร