2024-04-19 17:58:46 发布
网友
在Python中循环遍历列表时,如果没有列表理解,我就无法修改元素。 供参考:
li = ["spam", "eggs"] for i in li: i = "foo" li ["spam", "eggs"] li = ["foo" for i in li] li ["foo", "foo"]
那么,为什么我不能通过Python中的循环修改元素呢?我肯定少了点什么,但我不知道。我确定这是一个副本,但我找不到关于这个的问题,如果有链接,那就足够了。提前谢谢你!
我可以在循环时修改列表:
lst = range(10) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for i, elem in enumerate(lst): lst[i] = 0 // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
实际上,对于列表理解,您并没有修改列表,而是创建一个新列表,然后将其分配给包含前一个列表的变量。
不管怎样,当您执行for i in li操作时,您将获得变量i中li的每个值的副本,您不会获得对li中某个位置的引用,因此您不会修改li中的任何值。
for i in li
i
li
如果要修改列表,可以使用enumerate:
enumerate
>>> li = ["spam", "eggs"] >>> for i,_ in enumerate(li): li[i] = "foo" >>> li ['foo', 'foo']
或者使用xrange(在Python 2.7中,使用Python 3中的range):
xrange
>>> for i in xrange(len(li)): li[i] = "foo" >>> li ['foo', 'foo']
或者你在问题中的列表理解。
因为for i in li的工作方式是这样的:
for idx in range(len(li)): i = li[idx] i = 'foo'
所以如果你给i赋值,它不会影响li[idx]。
li[idx]
解决方案可以是您所建议的,也可以是循环索引:
for idx in range(len(li)): li[idx] = 'foo'
或者使用enumerate:
for idx, item in enumerate(li): li[idx] = 'foo'
我可以在循环时修改列表:
实际上,对于列表理解,您并没有修改列表,而是创建一个新列表,然后将其分配给包含前一个列表的变量。
不管怎样,当您执行
for i in li
操作时,您将获得变量i
中li
的每个值的副本,您不会获得对li
中某个位置的引用,因此您不会修改li
中的任何值。如果要修改列表,可以使用
enumerate
:或者使用
xrange
(在Python 2.7中,使用Python 3中的range):或者你在问题中的列表理解。
因为
for i in li
的工作方式是这样的:所以如果你给
i
赋值,它不会影响li[idx]
。解决方案可以是您所建议的,也可以是循环索引:
或者使用
enumerate
:相关问题 更多 >
编程相关推荐