[英]Unzip vs explicit loop
解壓縮兩個壓縮列表的兩種方法之間有什么區別?
assert isinstance(X, list)
assert isinstance(X[0], tuple)
assert isinstance(X[0][0], list)
assert isinstance(X[0][0][0], dict)
X_model = []
X_synth = []
for row in X:
X_model.append(row[0])
X_synth.append(row[1])
X_model現在是字典列表的列表
X_model, X_synth, = zip(*X)
X_model是字典列表的元組,結果不應該一樣嗎?
讓我們舉個例子。 為了簡單起見,讓我們使用數字而不是使用字典列表。 注意,每個元組的第一個元素是奇數,每個元組的第二個元素是偶數。
>>> X = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
>>> X_model = []
>>> X_synth = []
>>> for row in X:
... X_model.append(row[0])
... X_synth.append(row[1])
...
>>> X_model
[1, 3, 5, 7, 9]
>>> X_synth
[2, 4, 6, 8, 10]
>>> X_model, X_synth = zip(*X)
>>> X_model
(1, 3, 5, 7, 9)
>>> X_synth
(2, 4, 6, 8, 10)
讓我們考慮zip(*X)
。 zip(*X)
等效於
zip((1, 2), (3, 4), (5, 6), (7, 8), (9, 10))
zip:此函數返回一個元組列表 ,其中第i個元組包含每個參數序列或可迭代對象中的第i個元素。
因此zip將返回一個元組列表,其中第0個元組包含每個參數的第0個元素(所有奇數),第1個元組包含每個參數的所有第1個元素(所有偶數)
X_model, X_synth = [(1, 3, 5, 7, 9), (2, 4, 6, 8, 10)]
相當於zip()
將是:
X_model = tuple(x for x, _ in X)
X_synth = tuple(x for _, x in X)
但這不是很有效,因為它會循環X
次。 注意: tuple
是不可變的,因此您不能像每次創建一個新元組那樣有效地循環執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.