如果我想刷新一个值,我想知道哪种方法更好。
myList = [1, 2, 3]
如果我想更改刷新列表的值。
一种方法是myList[2] = 5
另一种方式是
del myList[2]
myList[2] = 5
列表中的元素是一些对象,将经常刷新。 那么什么时候才能在第一种方法和哪种方法中删除元素 是一个人吗?
答案 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
并且您无法为项目被删除时分配不再存在的列表项目。