這個問題在這里已經有了答案: 對其執行某些操作后,Python 迭代器為空 1 個回答 如何防止迭代器耗盡? (5 個回答) 2 小時前關閉。
在我壓縮兩個串列并將 zip 物件作為串列列印后,我得到了所需的輸出。但是當我想從 zip 物件制作另一個串列時,我得到一個空串列。為什么會發生這種情況?
代碼:
result = zip(number_list, str_list)
# Converting iterator to list
result_list = list(result)
result_list2 = list(result)
print(result_list)
print(result_list2)
輸出:
[(1, 'one'), (2, 'two'), (3, 'three')]
[]
uj5u.com熱心網友回復:
因為zip回傳一個迭代器,而一個迭代器意味著只能迭代一次。
第一次通過以下方式從 zip 物件創建串列時:
>>> result_list = list(result)
結果中的專案被迭代并從中創建一個串列。
下次您嘗試使用同一個 zip 物件創建串列時,這些專案已經被迭代并且不再迭代,這就是為什么您會得到一個空串列。
>>> result_list2 = list(result)
您可以嘗試將結果傳遞給next,您將得到StopIterationError這意味著迭代器不能再被進一步迭代:
>>> next(result)
Traceback (most recent call last):
File "<input>", line 1, in <module>
StopIteration
uj5u.com熱心網友回復:
zip回傳一個迭代器物件。第一次將它轉換為串列時,迭代器被消耗,之后它是空的。如果您立即將其轉換為串列,您將獲得您期望的行為,然后copy:
result = list(zip(number_list, str_list))
# Converting list to more lists
result_list = result.copy()
result_list2 = result.copy()
通常,zip物件意味著立即使用(例如,在for回圈中或直接傳遞給采用可迭代物件的函式)。zip在很多情況下,將呼叫結果分配給變數是沒有用的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327223.html
下一篇:根據物件id更新串列中的物件
