Python:将列表添加到列表更改列表中

时间:2013-01-04 04:54:00

标签: python list

我在循环中创建一个名为'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

1 个答案:

答案 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]]