Python如何同时遍历两个不等长列表,短列表循环复用直到长列表遍历结束
不等长列表循环遍历解决方案
你之前尝试使用的
itertools.zip_longest无法满足需求,该方法的fillvalue仅支持设置固定填充值,不能实现短列表遍历结束后自动从头循环的效果。
实现代码
首先导入Python标准库itertools中的cycle方法,它可以无限重复迭代传入的序列,配合内置的zip方法即可实现需求:
import itertools # 注意原示例中的00是Python3不支持的前导零十进制写法,修正为0 _list = [19, 74, 544, 39, 0, 34, 44, 593, 33, 2123, 22] _list1 = [0, 1, 2, 3, 4] # 用cycle包装短列表,和长列表zip即可 result = list(zip(_list, itertools.cycle(_list1))) print(result)
输出结果
运行后得到的结果完全符合预期:
[(19, 0), (74, 1), (544, 2), (39, 3), (0, 4), (34, 0), (44, 1), (593, 2), (33, 3), (2123, 4), (22, 0)]
原理解释
itertools.cycle(_list1)会无限循环输出_list1的元素,短列表遍历完自动回到开头zip方法会在参与配对的最短可迭代对象耗尽时停止,这里因为cycle生成的是无限序列,所以会完全遍历完更长的_list后停止
内容的提问来源于stack exchange,提问作者Chinese Billi
相关产品推荐
相关产品推荐

