我试图使用以下方法一次迭代3个以上的元素(这似乎有效):
for a, b, c in zip(*[iter(accounts_iter)]*3):
print(a)
print(b)
print(c)accounts_iter是一个元组列表,i created.iter(accounts_iter)将accounts_iter解压到列表迭代器中,所以它仍然是一个元组列表,就像它现在可迭代的一样。
这是我难以理解的地方。
*[iter(accounts_iter)]将Step 2中的列表解压缩为单独的元组,因此不再是元组列表,而是单个tuples*[iter(accounts_iter)]*3乘以3。
在我的输出中,我似乎没有重复的,但确实能够处理每个循环3项。
但是,一旦zip(*[iter(accounts_iter)]*3)发生,我就不会有3份相同的元组吗?
发布于 2022-02-26 03:44:21
展开层层的“聪明”,您可能会发现这种等效的拼写更容易理解:
x = iter(accounts_iter)
for a, b, c in zip(*[x, x, x]):
print(a, b, c)这又相当于一个更不聪明的人:
x = iter(accounts_iter)
for a, b, c in zip(x, x, x):
print(a, b, c)现在它应该开始变得清晰了。只有一个迭代器对象,x。在每次迭代中,zip()在幕后对传递给它的每个迭代器对象调用3次next(x)。但每次都是相同的迭代器对象。因此,它传递前3个next(x)结果,并让共享迭代器对象等待下一个交付其第四个结果。泡沫,冲洗,重复。
顺便说一句,我怀疑你在头脑中不正确地解析*[iter(accounts_iter)]*3。尾随*3首先发生,然后前缀*应用于创建的3元素列表*3。f(*iterable)是一个使用可变参数调用f()的快捷方式,每个iterable传递的对象都有一个参数。
https://stackoverflow.com/questions/71273873
复制相似问题