如何在Python中同时迭代多个元素?
当然有,下面给你两种常用的实现方法:
方法一:利用切片和range循环
这是最直观的写法,通过range设置步长,每次截取列表的一段切片:
l = [1, 2, 3, 4, 5, 6] step = 3 # 每次迭代的元素个数 for i in range(0, len(l), step): # 截取从i到i+step的切片,转成元组 chunk = tuple(l[i:i+step]) # 按要求格式打印 print(', '.join(map(str, chunk)))
输出结果:
1, 2, 3 4, 5, 6
如果列表长度不是step的整数倍,最后一组会包含剩余的所有元素(比如列表是[1,2,3,4,5],最后一组是(4,5))。
方法二:利用迭代器和zip(更简洁的写法)
借助Python的迭代器特性,用zip(*[iter(l)]*step)可以快速实现分组,这是Python里的经典技巧:
l = [1, 2, 3, 4, 5, 6] step = 3 # 每次迭代得到包含3个元素的元组 for chunk in zip(*[iter(l)]*step): print(', '.join(map(str, chunk)))
输出结果和上面一致。
原理说明
iter(l)创建一个指向列表l的迭代器,[iter(l)]*3生成三个指向同一个迭代器的引用。当zip从这三个迭代器中取元素时,实际上是不断从同一个迭代器里按顺序取元素,每次取3个,自然就实现了连续分组。
如果需要处理列表长度不是step整数倍的场景,且希望最后一组用默认值补全,可以用itertools.zip_longest:
from itertools import zip_longest l = [1, 2, 3, 4, 5] step = 3 for chunk in zip_longest(*[iter(l)]*step, fillvalue=''): print(', '.join(map(str, chunk)))
输出:
1, 2, 3 4, 5,
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

