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

如何按位置从多个等长列表生成连续相邻元素配对列表?

问题:多等长列表按位置生成连续相邻元素配对

给定多个长度相同的列表,需要按相同位置生成连续相邻元素的配对列表——每个位置的元素依次与下一个列表同位置元素配对(重复使用前一个值)。示例如下:

list_a = [1, 2, 3, 4, 5]
list_b = [6, 7, 8, 9, 10]
list_c = [11, 12, 13, 14, 15]
list_d = [16, 17, 18, 19, 20]

# 期望输出
[(1,6),(6,11),(11,16),(2,7),(7,12),(12,17), ...]

要求避免暴力循环,优先使用zip或itertools等工具实现。


解决方案

核心思路是先按位置打包所有列表的元素,再对每个位置的元素组生成相邻配对,最后合并结果:

方法1:纯内置函数实现(列表推导式)

list_a = [1, 2, 3, 4, 5]
list_b = [6, 7, 8, 9, 10]
list_c = [11, 12, 13, 14, 15]
list_d = [16, 17, 18, 19, 20]

# 生成结果
result = [pair for group in zip(list_a, list_b, list_c, list_d) 
          for pair in zip(group, group[1:])]

print(result)

方法2:itertools优化(适合大数据量)

如果列表元素较多,用itertools.chain可避免中间列表的内存开销:

import itertools

list_a = [1, 2, 3, 4, 5]
list_b = [6, 7, 8, 9, 10]
list_c = [11, 12, 13, 14, 15]
list_d = [16, 17, 18, 19, 20]

# 按位置打包元素组
position_groups = zip(list_a, list_b, list_c, list_d)
# 生成所有配对并合并
result = list(itertools.chain.from_iterable(zip(g, g[1:]) for g in position_groups))

print(result)

原理说明

  1. 按位置打包:zip(list_a, list_b, list_c, list_d)会将所有列表同位置的元素组合成元组,例如第一个元组为(1,6,11,16),对应四个列表的第一个元素。
  2. 生成相邻配对:对每个位置元组group,zip(group, group[1:])会将元组中相邻元素配对——group[1:]是去掉第一个元素的元组,两者zip后得到(1,6),(6,11),(11,16)这类连续配对。
  3. 合并结果:通过列表推导式或itertools.chain.from_iterable将所有位置的配对合并为一个大列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:11:08