请理解,我已经搜索过它,并且它已经有一个answer。但是,我正在寻找另一种方式来获得此结果。尽管我认为可以使用duplicate (最有可能是groupby
)来解决这个问题,但这可能被标记为itertools。
说我有一个列表data
。而且我想一次假设3个值是假设列表是值的个数,以便排除末尾不正确的值。
data = [1, 2, 3, 4, 5, 6,...]
这是我要遍历列表的方式(此代码显然无法正常工作):
for a, b, c in data:
#perform operations
pass
现在使用上面的代码,我希望在每次迭代中分别将a, b, c
依次为1, 2, 3
和4, 5, 6
。
我敢肯定,有一种比我链接的答案中更干净的方法。
对于那些不想单击链接以查看我所指的方法的懒惰人来说,这里是:
如果要通过成对的连续元素遍历列表,可以使用切片:
>>>myList = [4, 5, 7, 23, 45, 65, 3445, 234] >>>for x,y in (myList[i:i+2] for i in range(0,len(myList),2)): print(x,y) 4 5 7 23 45 65 3445 234
答案 0 :(得分:7)
这是一个iter
和zip
的hacky解决方案:
i = [1, 2, 3, 4, 5, 6]
d = iter(i)
for a, b, c in zip(*[d]*3):
print(a, b, c)
输出:
1 2 3
4 5 6
另外,如果您希望在原始列表不能被三整除的情况下迭代所有内容,则可以使用zip_longest
中的itertools
:
from itertools import zip_longest
i = [1, 2, 3, 4, 5, 6, 7]
d = iter(i)
for a, b, c in zip_longest(*[d]*3):
print(a, b, c)
输出:
1 2 3
4 5 6
7 None None
答案 1 :(得分:1)
当您想要块中的下一个元素时,也许使用迭代器并增加迭代器:
data = [1, 2, 3, 4, 5, 6]
it = iter(data)
for x in it:
a = x
b = next(it)
c = next(it)
print(a, b, c)
# Do something with a, b, and c