Python列表迭代耗尽

时间:2021-06-23 13:43:38

标签: python python-3.x list itertools

我如何同时迭代两个列表,一个列表比第二个大。所以第二个就完蛋了。我想再次开始较小的列表,直到较大的列表用完

_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) 直到更大的列表耗尽。

4 个答案:

答案 0 :(得分:6)

一个列表比第二个大。所以第二个就完蛋了。我想再次开始较小的列表,直到较大的列表用完

您可以按照以下方式组合 itertools.cyclezip

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))