python - 寻找一种同时循环遍历两个不同长度列表的优雅方法

标签 python python-3.x

我正在寻找同时遍历两个不均匀列表的最优雅/最短/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/

相关文章:

python - Supervisor 无法启动 Gunicorn : ENOENT

python - Scrapy 扩展 : spider_closed is not called

python - scikit-learn 中重复的FeatureUnion

python - 如何永远运行异步函数(Python)

python-3.x - 在Windows中使用pip命令安装dlib时出错

python - 为什么不能像定义中那样实现定点组合器?

Python df groupby 与 agg 用于字符串和总和

python - Polars - 如何用 Polars 表达式替换 df 中特定行和列的值(例如 df[3,4]=12)?

python - Discord 自机器人 : Direct messaging a user when joining a server/guild

python - 对于相同大小的列表,为什么深复制比浅复制慢得多?