You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python迭代不同长度两列表时短列表自动循环复用的实现方法

实现方案

核心用itertools.cycle实现短列表自动循环:这个工具可以把传入的可迭代对象包装成无限迭代器,元素取完后会自动从头开始循环取值,配合普通zip使用时,会在较长的列表遍历完成后自动终止,完全匹配需求。

针对你给出的示例,直接写即可:

import itertools

list_1 = [1, 2, 3, 4, 5]
list_2 = ['a', 'b']

for i, j in zip(list_1, itertools.cycle(list_2)):
    print(i, j)

运行输出和预期完全一致:

1 a
2 b
3 a
4 b
5 a

如果是通用场景,事先不确定两个列表哪个更长,可以加个简单的长度判断,自动选择要循环的短列表,适配任意长度差的情况:

import itertools

def zip_with_cycle(iter1, iter2):
    # 转换为列表方便取长度,如果传入本身是列表可以跳过这步
    seq1, seq2 = list(iter1), list(iter2)
    if len(seq1) < len(seq2):
        return zip(itertools.cycle(seq1), seq2)
    return zip(seq1, itertools.cycle(seq2))

# 不管哪个列表更长都能正常工作
# 比如短列表在第一个位置时:
# for i,j in zip_with_cycle([1,2], ['a','b','c','d','e']):
#     print(i,j)
# 输出为:
# 1 a
# 2 b
# 1 c
# 2 d
# 1 e

这个实现没有额外的内存开销,cycle不会真的把短列表重复拼接成长度匹配的新列表,只是迭代到末尾时重置取值指针,大体积列表场景下也可以放心用。

内容的提问来源于stack exchange,提问作者smoke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:45:33