def modify_list(n):
s = ""
for i in range(len(n)):
if n[i] % 2 == 0:
n[i] = n[i] // 2
elif n[i] % 2 > 0:
s += str(i)
for j in s:
b = int(j)
del n[b]
return n
les = [1,2,3,4,5,6,7,8,9]
print(modify_list(les))
错误:func.py”,第 10 行,in modify_list del n[b] IndexError:列表赋值索引超出范围
事实是,从列表开头删除元素后,剩余元素的索引会发生变化并且其长度会减少,因此最后您会尝试访问列表之外的元素。正确的解决方案是不从头删除,而是从尾删除:
更深入地看,将索引存储在一行中是错误的,为此最好使用列表:
让我们进一步优化它。条件
n[i] % 2 > 0
将始终为真,因此您可以排除它。然后我们使用列表生成器:需要注意的是,最后一段代码并没有修改原来的列表,而是新建了一个。