如果我想刷新一个值,我想知道哪种方法更好。
myList = [1, 2, 3]
如果我想更改刷新列表的值。
一种方法是myList[2] = 5
另一种方法是
del myList[2]
myList[2] = 5
列表中的元素是一些对象,会经常刷新。那么元素什么时候才能真正在第一种方法中被删除,哪种方法更好呢?
如果我想刷新一个值,我想知道哪种方法更好。
myList = [1, 2, 3]
如果我想更改刷新列表的值。
一种方法是myList[2] = 5
另一种方法是
del myList[2]
myList[2] = 5
列表中的元素是一些对象,会经常刷新。那么元素什么时候才能真正在第一种方法中被删除,哪种方法更好呢?
正确的是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
是好的和简单的。好像你想最后追加(索引不存在)然后使用追加()。
第一种方法中的元素永远不会真正删除,它的值只是改变了(意味着它指向不同的对象/值)。
第二种方法根本不是有效的 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]
结论:使用第一种方法,因为它是迄今为止最简单的,并且不会给您带来麻烦(如第二种方法)。
第一个仅更改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
此外,第二个生成异常
>>> 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
并且您不能为在项目被删除时不再存在的列表项分配值。