如何在遍历列表时修改列表元素



在Python中,在迭代列表时不可能修改列表。例如,下面我不能修改list_1print的结果将是[0, 1, 2, 3, 4]。在第二种情况下,我在类实例列表上循环,调用set_n方法修改列表中的实例,同时对其进行迭代。实际上,print将给出[4, 4, 4, 4, 4]

这两种情况有何不同,为什么?

# First case: modify list of integers 
list_1 = [0, 1, 2, 3, 4]
for l in list_1:
l += 1
print(list_1)
# Second case: modify list of class instances
class Foo:
def __init__(self, n):
self.n = n

def set_n(self, n):
self.n = n

list_2 = [Foo(3)] * 5
for l in list_2:
l.set_n(4)
print([l.n for l in list_2])

在迭代列表的同时修改列表当然是可能的,您只需要引用列表,而不是包含列表值的变量。

for i in range(len(list_1)):
list_1[i] += 1

第二种情况的不同之处在于,变量包含对可变容器对象的引用。您正在修改该对象的内容,而不是分配给变量。

最新更新