出典:私のブログ投稿(より良いフォーマット)
例
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
入力
ゼロ以上のイテラブル[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 =(numbers、letters); len(args)== 2→2つの要素を持つタプル
i
th tuple =(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 =各圧縮されたタプルの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
*
numbers
(1引数)を取り、その2つの要素を2つの引数に「アンパック」しました
zip
ていますか?なぜ3つのリストが必要なのですか-それらはどのように見えますか?