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

如何写出Python单行列表推导式实现相邻元素配对的邪典代码

Python邪典单行列表推导式配对实现思路

下面所有实现均满足要求:仅with open为外部语句,所有逻辑封装在单行列表推导式内,无显式中间变量定义。

实现1:迭代器切片配对(最简洁款)

利用列表推导式内部for临时变量特性,直接在推导式内部预生成转换后的整数序列,用zip配对相邻元素,补全末尾占位:

with open("file") as f:
    [(a, b) for seq in [[*map(int, f.read().split())]] for a, b in zip(seq, seq[1:] + [object()])]

*注:末尾的object()可替换为你需要的任意占位值,比如None、?对应的字符串等。

实现2:locals存状态(纯邪典款)

完全利用推导式作用域的locals()字典存储临时缓存,无任何显式序列预生成,全程边迭代边配对:

with open("file") as f:
    [locals().setdefault('res', []).append((locals()['prev'], curr)) if 'prev' in locals() else None, locals().__setitem__('prev', curr)][0] for curr in map(int, f.read().split())] + [(locals()['prev'], None)]

*注:利用逗号表达式的返回值特性,把状态更新逻辑塞到推导式的迭代逻辑里,完全符合语法规则。

实现3:动态索引访问(无zip款)

不用zip,直接通过索引访问相邻元素,适合需要自定义配对逻辑的场景:

with open("file") as f:
    [(seq[i], seq[i+1] if i < len(seq)-1 else None) for seq in [[*map(int, f.read().split())]] for i in range(len(seq))]

注意事项

  • 所有实现均仅用于炫技,生产环境严禁使用,可读性和性能都远低于普通实现
  • 如果要修改占位符,直接替换末尾的None/object()即可
  • 若读取的文件内容为空,可自行加判断逻辑塞到推导式的if条件里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:02