我如何同时迭代两个列表,一个列表比第二个大。所以第二个就完蛋了。我想再次开始较小的列表,直到较大的列表用完
_list = [ 19 , 74, 544, 39, 00, 34, 44, 593, 33, 2123, 22]
_list1 = [0, 1, 2, 3, 4]
我尝试过的事情:
我使用了 itertools.zip_longest,但我不知道在填充值中使用什么。
需要的输出:
我想要的输出:(19, 0), (74, 1) ----- (34, 5) (44, 0) (593, 1)
直到更大的列表耗尽。
答案 0 :(得分:6)
一个列表比第二个大。所以第二个就完蛋了。我想再次开始较小的列表,直到较大的列表用完
您可以按照以下方式组合 itertools.cycle
和 zip
import itertools
li1 = [19, 74, 544, 39, 00, 34, 44, 593, 33, 2123, 22]
li2 = [0, 1, 2, 3, 4]
for i in zip(li1, itertools.cycle(li2)):
print(i)
输出
(19, 0)
(74, 1)
(544, 2)
(39, 3)
(0, 4)
(34, 0)
(44, 1)
(593, 2)
(33, 3)
(2123, 4)
(22, 0)
答案 1 :(得分:2)
类似于@Daweo 的回答:
_list = [ 19 , 74, 544, 39, 00, 34, 44, 593, 33, 2123, 22]
_list1 = [0, 1, 2, 3, 4]
_merged = [(v, _list1[i % len(_list1)]) for i, v in enumerate(_list)]
print(_merged)
应该给你:
[(19, 0), (74, 1), (544, 2), (39, 3), (0, 4), (34, 0), (44, 1), (593, 2), (33, 3), (2123, 4), (22, 0)]
答案 2 :(得分:2)
更容易理解的东西。 哪个列表更大并不重要,代码会处理它。
list1 = [ 19 , 74, 544, 39, 00, 34, 44, 593, 33, 2123, 22]
list2 = [0, 1, 2, 3, 4]
len1 = len(list1)
len2 = len(list2)
lenMax = max(len1, len2)
for i in range(lenMax):
print("({},{})".format(list1[i%len1], list2[i%len2]), end=", ")
print()
答案 3 :(得分:1)
你可以试试 itertools.cycle:
result_list = []
cycle_list = itertools.cycle(shorter_list)
for i in loner_list():
result_list.append((i, next(cycle_list))