关于del使用时可能出现的问题

关于del使用时可能出现的问题

今天做题时,遍历一个列表删除奇数元素时俺使用了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]

如果有什么不对或者不恰当的地方还请大家在评论区指出来!

猜你喜欢

转载自blog.csdn.net/Ke_zs/article/details/105459399