![](/img/trans.png)
[英]Why does my array lose its mask after doing multidimensional indexing in Numpy?
[英]Why does an iterator lose its content after being printed out?
當我嘗試打印迭代器的內容時,它們消失了。 這是預期的行為嗎?
#!/usr/bin/env python3
string="foobarbaz" # Only as an example.
characters = string.encode('ISO-8859-1')
iterator = zip(characters[1:], characters)
iteratora = zip(characters[1::2], characters[::2])
iteratorb = zip(characters[2::2], characters[1::2])
# print(list(iterator))
# print(list(iteratora))
# print(list(iteratorb))
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
hex((sum(elements) + characters[0]) % 0x10000)
上面的代碼按預期運行並返回以下內容:
'0xac66'
現在,我想取消注釋第一行打印,因此代碼將如下所示:
#!/usr/bin/env python3
string="foobarbaz" # Only as an example.
characters = string.encode('ISO-8859-1')
iterator = zip(characters[1:], characters)
iteratora = zip(characters[1::2], characters[::2])
iteratorb = zip(characters[2::2], characters[1::2])
print(list(iterator))
# print(list(iteratora))
# print(list(iteratorb))
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
hex((sum(elements) + characters[0]) % 0x10000)
現在它返回這個:
'0x66'
print
語句中的list
轉換是否改變了iterator
的原始值?
list(iterator)
消耗迭代器。 因此,當取消注釋print(list(iterator))
, elements
將是一個空列表:
string = "foobarbaz"
characters = string.encode('ISO-8859-1')
iterator = zip(characters[1:], characters)
print(list(iterator))
# [(111, 102), (111, 111), (98, 111), (97, 98), (114, 97), (98, 114), (97, 98), (122, 97)]
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
print(elements)
# []
相比:
string = "foobarbaz"
characters = string.encode('ISO-8859-1')
iterator = zip(characters[1:], characters)
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
print(elements)
# [11322, 333, 10878, 293, 11058, 326, 9506, 316]
如果你想打印iterator
你應該深度復制它:
import copy
.
.
print(list(copy.deepcopy(iterator)))
.
.
另一種方法是在嘗試打印之前將iterator
轉為列表:
.
.
iterator = list(zip(characters[1:], characters))
print(iterator)
# [(111, 102), (111, 111), (98, 111), (97, 98), (114, 97), (98, 114), (97, 98), (122, 97)]
elements = [x + 2 * y if index % 2 else x * y
for index, (x, y) in enumerate(iterator)]
print(elements)
# [11322, 333, 10878, 293, 11058, 326, 9506, 316]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.