Python如何同时遍历两个列表,让短列表循环重复匹配长列表?
问题描述
我有两个列表:
test1 = ["1","2","3"] test2 = ["a","b","c","d","e"]
我希望同时遍历这两个列表,但当test2的长度大于test1时,test1能够重复自身继续匹配。
我尝试过使用zip函数:
for x , y in zip(test1,test2): print(x) print(y)
但该函数会在test1的所有元素遍历完成后停止,输出如下:
1 a 2 b 3 c
我期望得到的输出是:
1 a 2 b 3 c 1 d 2 e
解决方案
方法1:使用itertools.cycle(推荐)
Python的itertools模块里的cycle函数可以无限重复迭代一个可迭代对象,将它和test2配合zip使用就能实现需求:
from itertools import cycle test1 = ["1","2","3"] test2 = ["a","b","c","d","e"] for x, y in zip(cycle(test1), test2): print(x) print(y)
这段代码会让test1循环迭代,直到test2的元素全部遍历完成,输出结果完全符合预期。
方法2:手动实现循环逻辑
如果不想引入额外模块,可以通过索引取模的方式手动实现循环匹配:
test1 = ["1","2","3"] test2 = ["a","b","c","d","e"] len_test1 = len(test1) for idx, y in enumerate(test2): x = test1[idx % len_test1] print(x) print(y)
这里利用idx % len_test1的取模运算,让索引在超过test1长度时自动回到开头,从而实现test1元素的重复匹配。
内容的提问来源于stack exchange,提问作者feefewfgwtg
相关产品推荐
相关产品推荐

