今天做题时,遍历一个列表删除奇数元素时俺使用了del命令来删除,这时候,就出现了一些问题,在这里和各位分享一下。
list = [1, 2, 3, 4, 5]
for i in list:# 删除奇数
if i % 2 != 0:
del i
print(list)#[1, 2, 3, 4, 5]
此时,控制台输出的依旧是原列表。这是因为它是根据索引(元素所在位置)来删除的
,简单的说,就是咱们得说清楚它在哪,是什么,才能把它删除。
list = [1, 2, 3, 4, 5]
for i in range(0,5):# 删除奇数
if list[i] % 2 != 0:
del list[i]
print(list)
IndexError: list index out of range
既然我们得说清楚它在哪,是什么,才能把它删除,可这样却报错了。
这是为什么呢?列表下标越界了,为什么呢,range不是(0,5)刚刚好五个数吗?这是因为,del语句每删除列表中的一个元素,往后的元素就会自动向前补位
,即,当我删除1时,列表中只剩下4个元素,于是报错了。
list = [1, '1', 3, 4, 5]
for i in range(0,3):# 删除奇数
if list[i] % 2 != 0:
del list[i]
print(list)
此处,我将第二个元素改为字符串1,说明这个1没有被索引到,删除了第一个奇数1后,接下来list[1]得到的是3
最后,我是通过其他方法得到偶数输出滴!
list = [1, 2, 3, 4, 5]
even_list=[]
for i in list:
if i % 2 ==0: # 偶数
even_list.append(i)
print(even_list)#[2, 4]
如果有什么不对或者不恰当的地方还请大家在评论区指出来!