我有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
outpus将会出现
[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]
答案 0 :(得分:3)
那是因为你实际上有一个对同一(单个)2项目列表的10个引用的列表。您正在重复添加到第二个循环中的相同列表。你真的想要一个子列表的新实例(你真正拥有的是一个可变列表,而不是一个元组)。
你可以这样做:
while i < k:
count.append(value[:])
i=i+1
获取嵌入列表的新副本。
答案 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.append(value)
,您正在向[1, 2]
列表添加与count
相同的可变引用,并不断更新再一次。
通过用count.append([1,2])
替换该行,确保每次添加新的不同列表。
顺便说一句,你没有在你的代码中的任何地方使用元组(如问题中所述),只有列表。
答案 2 :(得分:0)
问题在于python如何使用内存,每次将值附加到count时,实际上是在追加对value的内存位置的引用。发生的是每次循环时t [0]被添加到值[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)会在循环中生成索引号和项,因此您不必在任何地方使用while。