簡體   English   中英

解壓縮與顯式循環

[英]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))

Python文檔

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM