python中删除和赋值元素有什么区别?

时间:2013-01-11 06:14:26

标签: python

如果我想刷新一个值,我想知道哪种方法更好。

myList = [1, 2, 3]

如果我想更改刷新列表的值。

一种方法是myList[2] = 5

另一种方式是

del myList[2]
myList[2] = 5

列表中的元素是一些对象,将经常刷新。 那么什么时候才能在第一种方法和哪种方法中删除元素 是一个人吗?

3 个答案:

答案 0 :(得分:1)

正确是myList[2] = 5

但是这段代码会产生异常:

>>> del myList[2]
>>> myList
[1, 2]
>>> myList[2] = 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range  

当您执行del myList[2]时,myList变为长度为2,因此最大索引为1,并且您正在尝试插入不存在的位置myList[2] = 5 。(超限问题)

您可能有第二选择,就像这样

>>> del myList[2]
>>> myList
[1, 2]
>>> myList.append(5); 
>>>  myList
[1, 2, 5]  

但是如果你只是想刷新一个值。在现有索引上,那么myList[2] = 5的第一个选择是好的和简单的。如果你想最后追加(索引不存在),那么使用append()。

答案 1 :(得分:1)

第一种方法中的元素永远不会被真正删除,它的值只是被改变(意味着它指向不同的对象/值)。

第二种方法根本不是有效的Python,因为删除mylist[2]后,mylist中只有2个元素,而mylist[2]将不再存在。即使您删除了列表中间的元素,您仍然会更改错误的值,并且您需要切片来重新分配它。见下文:

mylist = [1, 2, 3]
mylist[1] = 4
print(mylist)
# [1, 4, 3]

del mylist[1]
print(mylist)
# [1, 3]

mylist[1] = 0
print(mylist)
# [1, 0]

结论:使用第一种方法,因为它是迄今为止最简单的方法,并且不会给您带来麻烦(如第二种方法)。

答案 2 :(得分:0)

第一个只改变了python查找值的位置......

>>> mylist = [1,2,3]
>>> id(mylist[2]) # check location
31108776
>>> mylist[2] = 5 # change the value
>>> mylist
[1, 2, 5]         # the value has changed
>>> id(mylist[2])
31108752          # location has also changed

此外,2nd会生成异常

>>> mylist = [1,2,3]  
>>> del mylist[2]  
>>> mylist[2] = 5  
Traceback (most recent call last):  
  File "<pyshell#2>", line 1, in <module> 
    mylist[2] = 5  
IndexError: list assignment index out of range  

并且您无法为项目被删除时分配不再存在的列表项目。