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

咨询Python中迭代列表相邻元素对的更优雅实现方式

更自然地迭代列表相邻元素对的Python实现

哈哈,太懂这种被Python的优雅特性惯坏的感觉了!想要那种更简洁直观的写法当然有,而且不止一种方案,给你整理几个常用的:

1. 最简洁的方案:用zip函数

这是最常用也最直观的写法,直接用zip把原列表和它的切片(从第二个元素开始)配对就行:

L = [12, 15, 29, 100, 239]
for i, j in zip(L, L[1:]):
    print(i, j)

运行结果和你原来的代码完全一致。唯一要注意的是,L[1:]会创建一个原列表的切片副本,如果你的列表特别大,可能会占用额外内存,但绝大多数日常场景下这都不是问题。

2. 内存友好版:用itertools.islice

如果要处理超大列表,不想创建切片副本,可以用itertools里的islice生成迭代器,这样不会额外占用内存:

from itertools import islice

L = [12, 15, 29, 100, 239]
for i, j in zip(L, islice(L, 1, None)):
    print(i, j)

islice(L, 1, None)会返回一个从原列表第二个元素开始的迭代器,和原列表的迭代器一起传给zip,效率拉满。

3. 完全符合你预期的写法:自定义生成器函数

如果你就是想要for i, j in intervals(L)这种形式,自己写个生成器函数就搞定了,还能复用:

def intervals(lst):
    for i in range(len(lst)-1):
        yield lst[i], lst[i+1]

L = [12, 15, 29, 100, 239]
for i, j in intervals(L):
    print(i, j)

这个函数本质上就是把你原来的循环逻辑封装成了生成器,用起来完全符合你的预期,代码可读性也很高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:49