我在循环中创建一个名为'temp'的列表,并将其附加到母列表'trouble'。当我在第二轮循环中将'temp'追加到'麻烦'时,'麻烦'本身似乎正在发生变化。 为简洁起见,我简化了代码以仅包含此实例。
award=[[['A',1],['B',1]],[['A',1],['C',1]],[['A',1],['C',1],['D',1]]]
trouble=[]
print '\n'
for n in range(len(award)-1):
temp=[]
for i in range(len(award[n])):
temp.append(award[n][i])
for i in range(len(award[n+1])):
for k in range(len(temp)):
if(temp[k][0]==award[n+1][i][0]):
temp[k][1]+=award[n+1][i][1]
break
else:
temp.append(award[n+1][i])
print 'temp', temp
trouble.append(temp)
print '\tn = ',n, '\n\ttrouble'
for i in range(len(trouble)):
print trouble[i]
print '\n'
输出如下:
temp [['A', 2], ['B', 1], ['C', 1]]
n = 0
trouble
[['A', 2], ['B', 1], ['C', 1]]
temp [['A', 2], ['C', 2], ['D', 1]]
n = 1
trouble
[['A', 2], ['B', 1], ['C', 2]]
[['A', 2], ['C', 2], ['D', 1]]
我不明白为什么['C',1],在第一个追加实例之后没有(根据我)被触及,在第二个追加实例后被改变了。
任何帮助都将受到极大的赞赏。
提前谢谢。
Anagha Madhusudanan
答案 0 :(得分:0)
我认为问题完全是因为:
temp.append(award[n+1][i])
奖励[1] [1]的引用已经麻烦两次,所以添加了任何元素,所有值都将被更改。 将列表附加到母列表中时,您应该进行深层复制。
award=[[['A',1],['B',1]],[['A',1],['C',1]],[['A',1],['C',1],['D',1]]]
trouble=[]
print '\n'
for n in range(len(award)-1):
temp=[]
for i in range(len(award[n])):
tem = award[n][i][:] // deep copy
temp.append(tem)
for i in range(len(award[n+1])):
for k in range(len(temp)):
if(temp[k][0]==award[n+1][i][0]):
temp[k][1]+=award[n+1][i][1]
break
else:
tem = award[n+1][i][:] # deep copy
temp.append(tem)
print 'temp', temp
trouble.append(temp)
print '\tn = ',n, '\n\ttrouble'
for i in range(len(trouble)):
print trouble[i]
print '\n'
# temp [['A', 2], ['B', 1], ['C', 1]]
# n = 0
# trouble
# [['A', 2], ['B', 1], ['C', 1]]
# temp [['A', 2], ['C', 2], ['D', 1]]
# n = 1
# trouble
# [['A', 2], ['B', 1], ['C', 1]]
# [['A', 2], ['C', 2], ['D', 1]]