我正在寻找同时遍历两个不均匀列表的最优雅/最短/Pythonic 方式。如果较短的列表在某个点结束,它应该从头开始迭代。
到目前为止,我设法用 while
做到了,我认为它很丑,而且太长(出于各种原因我需要尽可能短的代码)。
list1 = ["a", "b", "c"]
list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
i1 = 0
i2 = 0
while True:
if i2 == len(list2):
break
if i1 == len(list1):
i1 = 0
print(list1[i1], list2[i2])
i1 += 1
i2 += 1
预期的结果应该是这样的。我正在用 while 循环(上面的代码)实现它。但我需要尽可能短的代码:
a 1
b 2
c 3
a 4
b 5
c 6
a 7
b 8
c 9
a 10
最佳答案
zip
两个列表,将最短的一个提供给 itertools.cycle
所以它会无限期地重复(直到 list2
结束):
import itertools
list1 = ["a","b","c"]
list2 = [1,2,3,4,5,6,7,8,9,10]
for a,b in zip(itertools.cycle(list1),list2):
print(a,b)
打印:
a 1
b 2
c 3
a 4
b 5
c 6
a 7
b 8
c 9
a 10
(当然不要使用 itertools.zip_longest
因为 cycle
永远不会结束,这会造成无限循环)
关于python - 寻找一种同时循环遍历两个不同长度列表的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581654/