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

如何用单行代码在Python中按弃1留2规则处理列表元素?

列表按规则筛选的单行Python实现

问题场景

给定列表:

l = [0, 0, 0, 1, 1, 1, 0, 0, 1]

需要按丢弃第一个元素→保留接下来2个→丢弃下1个→保留接下来2个的循环规则处理,预期输出:

[0, 0, 1, 1, 0, 1]

直接用l[::2]会得到[0, 0, 1, 0, 1],不符合要求。

单行解决方案

方案1:列表推导式(无依赖)

利用索引判断规则直接生成结果:

result = [val for idx, val in enumerate(l) if (idx - 1) % 3 in (0, 1)]

逻辑说明:
索引从0开始,第一个元素(idx=0)丢弃,后续元素满足(idx-1) % 3等于0或1时保留:

  • idx=1/2 → 余数为0/1 → 保留
  • idx=3 → 余数为2 → 丢弃
  • idx=4/5 → 余数为0/1 → 保留,以此类推

方案2:切片分组拼接(直观易懂)

从索引1开始每3个元素分一组,每组取前2个后合并:

result = [x for group in [l[i:i+3] for i in range(1, len(l), 3)] for x in group[:2]]

逻辑说明:

  • range(1, len(l), 3)生成分组起始索引:1、4、7
  • 对应分组为[0,0,1]、[1,1,0]、[0,1]
  • 每组取前2个后,通过嵌套列表推导式合并成最终列表

方案3:迭代器处理(适合超大列表)

用迭代器避免生成中间列表,节省内存:

from itertools import islice; it=iter(l); next(it); result=[x for _ in iter(lambda: list(islice(it,2)), []) for x in _]

逻辑说明:

  • 先转为迭代器并丢弃第一个元素(next(it))
  • 循环用islice每次取2个元素,直到迭代器耗尽,最后合并所有取到的元素

验证结果

以上三种方案运行后,都能得到预期的[0, 0, 1, 1, 0, 1]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:33:37