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

如何找出列表中值从0变为1的索引?求代码优化方案

问题与解决方案:筛选列表中0→1的变化索引

嗨,我来帮你搞定这个列表索引筛选的问题~

问题说明

给定列表:

mot = [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0]

你需要提取仅当元素从0变为1时的索引(也就是当前元素为0、下一个元素为1时的当前索引i),但现有代码会同时记录0→1和1→0两种相邻元素变化的索引,无法满足需求,同时希望得到更简洁的实现方式。

修正原有代码

你的核心问题是没有区分元素变化的方向,只判断了相邻元素不等。只要在判断条件里明确限定“当前是0,下一个是1”就能解决问题:

mot = [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0]
mot_daily_index = []
i = 0
while i != len(mot)-1:
    # 只筛选0→1的变化
    if mot[i] == 0 and mot[i+1] == 1:
        mot_daily_index.append(i)
    i += 1
print(mot_daily_index)  # 输出: [6, 23]

更简洁的实现方式

用Python的列表推导式结合zip()和enumerate()可以一行搞定,代码更简洁易读:

mot = [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0]
mot_daily_index = [i for i, (curr, next_val) in enumerate(zip(mot, mot[1:])) if curr == 0 and next_val == 1]
print(mot_daily_index)  # 输出: [6, 23]

这里的逻辑拆解:

  • zip(mot, mot[1:])把原列表和它的切片(从第2个元素开始)配对,得到每一组相邻元素(curr, next_val)
  • enumerate()给每一组配对加上对应的当前索引i
  • 列表推导式只保留满足curr == 0 and next_val == 1的索引i

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:02:52