Python查找列表中多次出现的元素索引时报ValueError如何解决
错误产生原因
你的代码有两个核心问题共同导致了报错:
- 循环次数固定为5次,但
sample列表中仅存在2个0,前2次循环已经把所有0修改为1,第3次循环调用sample.index(0)时,列表中已经没有0元素,index()方法找不到目标值就会抛出ValueError。 - 写死的循环次数和实际列表中的0的数量不匹配,哪怕后续列表长度、0的数量发生变化,代码也无法适配。
另外额外提醒:当前写法会直接修改原列表,如果你后续还有其他逻辑需要使用原始的sample列表,会受影响。
解决方法
方案1:遍历索引判断(推荐,不修改原列表,适配性强)
直接用enumerate同时遍历元素的索引和值,遇到0就保存索引即可:
sample = [1, 0, 1, 0, 1] ind = [] for idx, num in enumerate(sample): if num == 0: ind.append(idx) print(ind)
方案2:列表推导式简化写法
和方案1逻辑一致,写法更简洁:
sample = [1, 0, 1, 0, 1] ind = [idx for idx, num in enumerate(sample) if num == 0] print(ind)
方案3:如果坚持用index()方法,调整循环次数
先统计列表中0的总个数,循环次数和0的个数保持一致,就不会出现找不到元素的问题,注意该方案还是会修改原列表:
sample = [1, 0, 1, 0, 1] ind = [] zero_total = sample.count(0) for _ in range(zero_total): zero_pos = sample.index(0) ind.append(zero_pos) sample[zero_pos] = 1 print(ind)
内容的提问来源于stack exchange,提问作者ultramagician
相关产品推荐
相关产品推荐

