繁体   English   中英

列表修改在python中如何工作

[英]how does list modification works in python

我有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

流浪汉出来是

[101, 22]
[101, 22]
[101, 22]
[101, 22]
[101, 22]
[101, 22]
[101, 22]
[101, 22]
[101, 22]
[101, 22]

正如我期望的那样

[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]
[11, 4]

那是因为您实际上有一个列表,列出了对同一(单个)2-项列表的十个引用。 您将在第二个循环中重复将其添加到同一列表中。 您确实想要一个子列表的新实例(而您真正拥有的是可变列表,而不是元组)。

您可以这样做:

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

获取嵌入列表的新副本。

尝试这个:

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.append(value) ,您正在将对 [1, 2]可变引用添加到count列表中,并不断地对其进行更新。

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

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

问题在于python如何使用内存,每当您添加值进行计数时,实际上是在对值的内存位置添加引用。 发生的情况是,每次循环遍历t [0]时都会将其添加到value [0]。 看到下面的操作(与您使用的设置相同)

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]

取而代之的是,您只想追加列表对象本身[1,2],而不将其分配给变量。

另外,enumerate()(内置python)会在循环中生成索引号和项目,因此您不必在各处使用whiles。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM