Python列表迭代耗尽

问题描述

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

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

解决方法

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

您可以按照以下方式组合 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)
,

类似于@Daweo 的回答:

_list = [ 19,22]
_list1 = [0,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,(44,(593,(33,(2123,(22,0)]
,

更容易理解的东西。 哪个列表更大并不重要,代码会处理它。

list1 = [ 19,22]
list2 = [0,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()
,

你可以试试 itertools.cycle:

result_list = []
cycle_list = itertools.cycle(shorter_list)
for i in loner_list():
    result_list.append((i,next(cycle_list))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...