range范围条件满足时仍出现index error索引错误的原因是什么?
错误原因分析
- 核心问题出在更新
oxy_val的列表推导式逻辑错误:错误提取了字符串的单个字符作为新的oxy_val元素,而非保留完整的原始字符串。
你编写的错误逻辑:
这行代码执行后,oxy_val = [val[num] for val in oxy_val if val[num] == '0']oxy_val的元素从原本长度为12的二进制字符串,变成了长度为1的单个字符('0'或'1')。当下一轮for num in range(12)循环中num取值大于等于1时,访问val[num]自然会触发string index out of range报错。 - 次要逻辑冗余:你把
for num in range(12)放在了while循环内部,哪怕oxy_val已经筛选到只剩1个元素,依然会继续跑完剩下的num循环,属于多余逻辑,但这不是报错的直接原因。
修复方案
把列表推导式里的返回值从val[num]改成val即可,同时可以把for num循环的逻辑调整为逐位递进,避免多余遍历:
lines = ['110011110101','110011100010','010100011010','011001100000','010011011101','011110111000'] oxy_val = lines.copy() num = 0 while len(oxy_val) > 1 and num < 12: ones = 0 zeroes = 0 for val in oxy_val: if val[num] == '0': zeroes+=1 elif val[num] == '1': ones+=1 if zeroes > ones: oxy_val = [val for val in oxy_val if val[num] == '0'] else: oxy_val = [val for val in oxy_val if val[num] == '1'] num += 1 print(oxy_val)
内容的提问来源于stack exchange,提问作者JD65
相关产品推荐
相关产品推荐

