所以..。
a = [2,3,4,5]
for x in a:
x += 1
a = [2,3,4,5]什么都没有。
但如果我..。
a[2] += 1
a = [2,3,5,5]显然,我的头脑无法理解基本知识。print(x)只返回单元格内的整数,因此它应该简单地为每个列表单元格自动添加一个整数。什么是解决办法,什么是我没有把握的?
发布于 2014-02-22 18:35:33
要了解这里发生了什么,请考虑这两段代码。第一:
for i in range(len(a)):
x = a[i]
x += 1第二:
for x in a:
x += 1 这两个for循环对x做的事情完全一样。从第一个方面可以看出,更改x的值根本不改变a;在第二个方面也是如此。
正如其他人所指出的,理解列表是创建具有新价值的新列表的好方法:
new_a = [x + 1 for x in a]如果不想创建新列表,可以使用以下模式更改原始列表:
for i in range(len(a)): # this gets the basic idea across
a[i] += 1
for i, _ in enumerate(a): # this one uses enumerate() instead of range()
a[i] += 1
for i, x in enumerate(a): # this one is nice for more complex operations
a[i] = x + 1发布于 2014-02-22 18:32:48
在本例中,您定义了一个新变量x,它依次引用a的每个元素。您不能修改x引用的x,因为int在int中是不可变的。当您使用+=运算符时,将创建一个新的int,x引用这个新的int,而不是a中的那个。如果您创建了一个包装了一个class的int,那么您可以使用您的循环,因为这个类的实例是可变的。(这不是必要的,因为Python提供了更好的方法来完成您想做的事情)
for x in a:
x += 1您想要做的是根据一个新列表生成一个新列表,并可能将其存储回一个。
a = [x + 1 for x in a]发布于 2014-02-22 18:31:31
如果要对ints列表中的元素+1:
In [775]: a = [2,3,4,5]
In [776]: b=[i+1 for i in a]
...: print b
[3, 4, 5, 6]为什么for x in a: x += 1失败?
因为x是一个不能就地修改的不可变的对象.如果x是一个可变对象,+=可能会工作:
In [785]: for x in a:
...: x+=[1,2,3] #here x==[] and "+=" does the same thing as list.extend
In [786]: a
Out[786]: [[1, 2, 3], [1, 2, 3]]https://stackoverflow.com/questions/21958543
复制相似问题