出典:私のブログ投稿(より良いフォーマット)
例
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
入力
0個以上の反復可能オブジェクト[1](リスト、文字列、タプル、辞書など)
出力(リスト)
1番目のタプル=(数字のelement_1、文字のelement_1)
2番目のタプル=(e_2番号、e_2文字)
…
n番目のタプル=(e_nの数字、e_nの文字)
- n個のタプルのリスト:nは最短の引数(入力)の長さです
- len(numbers)== 3 <len(letters)==4→short=3→3つのタプルを返す
- 各タプルの長さ=引数の数(タプルは各引数から要素を取得します)
- args =(数値、文字); len(args)==2→2つの要素を持つタプル
i
thタプル=(element_i arg1、element_i arg2…、element_i arg n
)
エッジケース
1)空の文字列:len(str)=0=タプルなし
2)単一の文字列:len(str)== len(args)==1要素の2つのタプル
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
Zip in Action!
1.2つのリストから辞書[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=各zipタプルのe1。tuple_2=それぞれのe2zipped
脚注
- メンバーを一度に1つずつ返すことができるオブジェクト(例:リスト[1,2,3]、文字列'I like codin'、タプル(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
*
(1 arg)を取りnumbers
、その2つの要素を2つのargに「解凍」しました