Python遍历列表每次取两个元素且复用前次第二个元素的实现方法
核心解法
你要实现的是相邻元素配对遍历,直接用zip()配对原列表和偏移1位的子列表即可,问号处替换为zip(l, l[1:])就能得到你要的效果:
l = [1,2,3,4,5,6] for i,k in zip(l, l[1:]): print str(i), '+', str(k), '=', str(i+k)
输出完全匹配你的预期:
1+2=3 2+3=5 3+4=7 4+5=9 5+6=11
原理解释
zip()函数会按位置依次拼接多个可迭代对象的元素,长度以最短的可迭代对象为准。l[1:]是原列表去掉第一个元素后的子列表,和原列表配对后刚好就是连续的相邻元素对,自动满足「前一次迭代的第二个元素是下一次迭代的第一个元素」的要求。
其他可选实现
1. 列表推导式实现
如果要直接生成结果列表,可以这么写:
# 生成字符串结果列表 result = [f"{i}+{k}={i+k}" for i,k in zip(l, l[1:])] # 生成求和结果列表 sum_result = [i+k for i,k in zip(l, l[1:])]
2. 索引遍历实现
不需要依赖zip()的写法,直接通过索引偏移取值:
for idx in range(len(l)-1): i = l[idx] k = l[idx+1] print str(i), '+', str(k), '=', str(i+k)
3. 大列表/惰性迭代场景优化
如果处理的是超大列表或者无法切片的惰性迭代器,可以用itertools.tee实现无额外内存占用的配对:
from itertools import tee def pairwise(iterable): a, b = tee(iterable) next(b, None) return zip(a, b) # 调用示例 for i,k in pairwise(l): print str(i), '+', str(k), '=', str(i+k)
内容的提问来源于stack exchange,提问作者Haziq Sayyed
相关产品推荐
相关产品推荐

