-6

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

myList = [1, 2, 3]

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

一种方法是myList[2] = 5

另一种方法是

del myList[2]
myList[2] = 5

列表中的元素是一些对象,会经常刷新。那么元素什么时候才能真正在第一种方法中被删除,哪种方法更好呢?

4

3 回答 3

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是好的和简单的。好像你想最后追加(索引不存在)然后使用追加()。

于 2013-01-11T06:17:04.040 回答
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]

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

于 2013-01-11T06:18:27.917 回答
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  

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

于 2013-01-11T06:48:40.280 回答