如何找出列表中值从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
相关产品推荐
相关产品推荐

