加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 寻找一种优雅的方式,可以在两个不同长度的列表上同时

发布时间:2020-12-20 12:41:32 所属栏目:Python 来源:网络整理
导读:我正在寻找最优雅/短/ pythonic方式同时迭代两个不均匀的列表.如果较短的列表在某个时刻结束,它应该从头开始迭代. 到目前为止,我设法用while来做,我认为这是丑陋的,太长了(由于各种原因,我需要尽可能短的代码). list1 = ["a","b","c"]list2 = [1,2,3,4,5,6,7
我正在寻找最优雅/短/ 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

解决方法

压缩两个列表,将最短的列表输入到 itertools.cycle,使其无限重复(直到list2结束):

import itertools

list1 = ["a",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作为循环永远不会结束,这将创建一个无限循环)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读