-1

我正在循环中创建一个名为“temp”的列表,并将其附加到一个母列表“trouble”。当我在循环的第二次运行中将“temp”附加到“trouble”时,“trouble”本身似乎正在发生变化。为了清楚起见,我简化了代码以仅包含此实例。

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] 在第一个附加实例之后(根据我)没有被触及,在第二个附加实例之后被更改。

任何帮助将不胜感激。

先感谢您。

阿纳迦马杜苏达南

4

1 回答 1

0

我认为问题完全在于:

temp.append(award[n+1][i])

Award[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]]
于 2013-01-04T05:13:10.450 回答