Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表修改在python中是如何工作的_Python_List - Fatal编程技术网

列表修改在python中是如何工作的

列表修改在python中是如何工作的,python,list,Python,List,我有一个包含10个元素的列表,其中有一个包含2个元素的元组,我想在每个元组中添加一个值,但当我编写下面的代码时,似乎计算了累积和。这是怎么发生的。请帮忙 # -*- coding: utf-8 -*- i=0 k=10 count=[] value=[1,2] while i < k: count.append(value) i=i+1 t=[10,2] i=0 #for item in count: #print item while i <(len(count)):

我有一个包含10个元素的列表,其中有一个包含2个元素的元组,我想在每个元组中添加一个值,但当我编写下面的代码时,似乎计算了累积和。这是怎么发生的。请帮忙

# -*- coding: utf-8 -*-
i=0
k=10
count=[]
value=[1,2]
while i < k:
  count.append(value)
  i=i+1
t=[10,2]
i=0
#for item in count:
  #print item
while i <(len(count)):
  count[i][0]+=t[0];
  count[i][1]+=t[1];
  i+=1;

for item in count:
  print item
正如我所期望的那样

[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
试试这个:

i=0
k=10
count=[]

while i < k:
  count.append([1,2])
  i=i+1

t=[10,2]
i=0

while i <(len(count)):
  count[i][0]+=t[0];
  count[i][1]+=t[1];
  i+=1;

for item in count:
  print item
问题出在这一行:count.appendvalue,您正在将对[1,2]的相同可变引用添加到计数列表中,并不断地不断更新它

通过使用count.append[1,2]替换该行,您可以确保每次添加新的、不同的列表

顺便说一句,您在代码中的任何地方都没有使用问题中所述的元组,只使用列表。

试试这个:

i=0
k=10
count=[]

while i < k:
  count.append([1,2])
  i=i+1

t=[10,2]
i=0

while i <(len(count)):
  count[i][0]+=t[0];
  count[i][1]+=t[1];
  i+=1;

for item in count:
  print item
问题出在这一行:count.appendvalue,您正在将对[1,2]的相同可变引用添加到计数列表中,并不断地不断更新它

通过使用count.append[1,2]替换该行,您可以确保每次添加新的、不同的列表


顺便说一下,在代码中的任何地方都没有使用问题中所述的元组,只使用列表。

这是因为您实际上有一个列表,其中包含对同一个2项列表的十个引用。在第二个循环中,您将重复添加到同一个列表中。您确实需要子列表的一个新实例,并且您真正拥有的是一个可变列表,而不是元组

您可以这样做:

while i < k:
  count.append(value[:])
  i=i+1

获取嵌入列表的新副本。

这是因为您实际上有一个包含对同一个2项列表的十个引用的列表。在第二个循环中,您将重复添加到同一个列表中。您确实需要子列表的一个新实例,并且您真正拥有的是一个可变列表,而不是元组

您可以这样做:

while i < k:
  count.append(value[:])
  i=i+1

获取嵌入列表的新副本。

问题在于python如何使用内存,每次向count追加值时,实际上是在向值的内存位置追加引用。每次循环时,t[0]都会被添加到值[0]中。请参阅您使用的相同设置下面的it操作

n [54]: for i, item in enumerate(count):
print count[i];
count[i][0] += t[0]
print count[i]
....:     
[1, 2]
[11, 2]
[11, 2]
[21, 2]
[21, 2]
[31, 2]
[31, 2]
[41, 2]
[41, 2]
[51, 2]
[51, 2]
[61, 2]
[61, 2]
[71, 2]
[71, 2]
[81, 2]
[81, 2]
[91, 2]
[91, 2]
[101, 2]
相反,对于您想要的输出,只附加list对象本身[1,2],而不将其分配给变量


此外,枚举一个python内置函数会生成索引号和循环中的项,因此不必到处使用whiles

问题在于python是如何使用内存的,每次将值附加到count时,实际上是将引用附加到值的内存位置。每次循环时,t[0]都会被添加到值[0]中。请参阅您使用的相同设置下面的it操作

n [54]: for i, item in enumerate(count):
print count[i];
count[i][0] += t[0]
print count[i]
....:     
[1, 2]
[11, 2]
[11, 2]
[21, 2]
[21, 2]
[31, 2]
[31, 2]
[41, 2]
[41, 2]
[51, 2]
[51, 2]
[61, 2]
[61, 2]
[71, 2]
[71, 2]
[81, 2]
[81, 2]
[91, 2]
[91, 2]
[101, 2]
相反,对于您想要的输出,只附加list对象本身[1,2],而不将其分配给变量


此外,枚举一个python内置函数会生成索引号和循环中的项,因此不必到处使用whiles

是的,它可以工作…但是上面的y代码不工作??我必须在程序中使用一个列表,该列表将具有可变值,因此我不能像this@manyu我刚刚用解释更新了我的答案,我希望它现在清楚了。@manyu使用此解决方案,您仍然可以在程序中更改列表中的值,所以问题是什么还不清楚。是的,它可以工作…但是上面的代码不工作??我必须在程序中使用一个列表,该列表将具有可变值,因此我不能像this@manyu我刚刚用解释更新了我的答案,我希望现在已经清楚了。@manyu使用此解决方案,您仍然可以在程序中更改列表中的值,因此不清楚问题出在哪里。