You need to enable JavaScript to run this app. Python中如何按指定元素数量(如3个)高效遍历两个列表?
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何按指定元素数量(如3个)高效遍历两个列表?

核心实现思路

要实现按指定块大小交错拼接两个列表,本质是把原本按单个元素的zip逻辑升级为按块配对:

  1. 先将两个输入列表分别拆分为固定大小的块序列
  2. 对两个块序列按位置配对,每次按「先列表A的块、后列表B的块」的顺序取出块
  3. 将所有取出的块压平为一维列表,即可得到目标结果
直观实现(适合小列表快速使用)

先定义块大小,直接生成块列表后拼接:

a = [1, 2, 3, 4, 5, 6]
b = [7, 8, 9, 10, 11, 12]
block_size = 3

# 拆分为块列表
a_blocks = [a[i:i+block_size] for i in range(0, len(a), block_size)]
b_blocks = [b[i:i+block_size] for i in range(0, len(b), block_size)]

result = []
for a_block, b_block in zip(a_blocks, b_blocks):
    result.extend(a_block)
    result.extend(b_block)
# 输出 [1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12]
高效实现(适合大列表/性能敏感场景)

使用itertools的迭代器实现,避免预生成所有块的中间列表,减少内存占用,同时依托C实现的迭代器提升运行速度:

import itertools

def get_blocks(lst, block_size):
    """生成器:按固定大小拆分列表,不一次性加载所有块到内存"""
    for i in range(0, len(lst), block_size):
        yield lst[i:i+block_size]

a = [1, 2, 3, 4, 5, 6]
b = [7, 8, 9, 10, 11, 12]
block_size = 3

a_blocks = get_blocks(a, block_size)
b_blocks = get_blocks(b, block_size)

# 按顺序拼出块序列:a块1、b块1、a块2、b块2...
ordered_blocks = itertools.chain.from_iterable(zip(a_blocks, b_blocks))
# 压平块序列为一维列表
result = list(itertools.chain.from_iterable(ordered_blocks))
边界场景处理

如果两个列表长度不一致,或列表长度不是块大小的整数倍,可改用itertools.zip_longest替代zip,补全短块序列的缺口,避免丢失末尾剩余元素:

from itertools import zip_longest, chain

# 替换原zip行,fillvalue=[] 表示缺失的块用空列表补全
ordered_blocks = chain.from_iterable(zip_longest(a_blocks, b_blocks, fillvalue=[]))
注意点
  • 若列表长度远大于块大小,无需将最终结果转成列表,直接迭代ordered_blocks的内容做处理,可进一步降低内存占用
  • 块大小可根据需求调整,无需固定为3,仅需修改block_size参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 03:36:02