python 都是删除列表操作,怎么一个报错一个不报错

  • list=[10,20,30,440,50,60,30]
    print('------------------------移除一个指定元素-------------------')
    list.remove(30)
    print(list)            #有重复元素时只删除第一个元素
    #list.remove(1000)      #当要删除的元素在列表中不存在时,报错:ValueError: list.remove(x): x not in list
    print('------------------第一次移除元素之后------------------------')
    print(list)
    print('----------------  删除指定位置元素------pop-------------------------')
    list.pop(3)
    print(list)
    #list.pop(33)          #指定的索引不存在,位置异常:IndexError: pop index out of range
    list.pop()            #不写参数时删除最后一个元素
    print(list)
    print('----------------------切片删除元素,至少一个元素,将产生一个新的列表对象----------------------------')
    new_list=list[1:3]
    print('原列表',list)
    print('切片后',new_list)             #新列表为指定的元素
    
    print('------------------------不产生新的列表对象,删除原列表中的元素-------切片操作------------------')
    list[1:3]=[]                          #用空列表代替指定位置的切片操作
    print(list)                        #操作后,删除指定位置的元素
    
    
    print('-----------------清除列表中的所有元素----clear------------------')
    list.clear()
    print(list)
    
    print('--------------------删除列表对象  del语句---------------------------------')
    del list  #之后list这个列表对象不存在了
    print(list)
    del new_list
    print(new_list)                    #NameError: name 'new_list' is not defined

    这是全部代码,不过绝大多数与本问题无关,不过不知道问题出在哪儿,所以就全粘了上来

 

输出的<class 'list'>的原因是

python一般有3个层次的作用域范围:函数的局部作用域、全局作用域 和 内置作用域。

作用域的范围排序是按照从内到外。

list 系统内置的函数是在最外层的内置作用域中。

你用list做变量名。是在全局作用域中,就暂时遮蔽了内置作用域中的list内置函数。

等用 del list 删除了全局作用域中的list变量之后,就又暴露出了内置作用域中的list内置函数,

print(list) 输出的<class 'list'>就是内置作用域中的list内置函数。


 

new_list被删除后,该变量已经不存在,再调用它时会报错。见示例:

a=new=[1,2,3]
del a
print(a)#运行会报a没有定义错误,因为该变量已经被解除了对列表的引用,成了没有定义的变量。
print(new)#变量new仍引用列表对象,所以输出[1,2,3]

 

List.clear() 是清空列表中的元素。只是把列表中的元素都删除,让列表变成[]空列表。

而 del List 是删除 List 变量,删除之后 List 变量已经不存在了,再访问List变量就会报错。

 

如果要用 del 把列表中的元素都删除应该是 del List[:]

 

List.clear() 和 del List[:] 是等效的。

List = [1,2,3]
List.clear()
print(List)  #输出 []

List1 = [1,2,3]
del List1[:]
print(List1)  #输出 []

List2 = [1,2,3]
del List2
print(List2) # List2 变量已经删除了,再访问List2变量就会报错 NameError: name 'List2' is not defined

 

这个报错是说你的那个list变量不存在,没有定义啊,就是找不到这个new_list变量。

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632