带有范围的For循环只占用最后一个元素

时间:2016-10-17 07:22:56

标签: python arrays list python-3.x multidimensional-array

我有一个2D数组字符串,我从中删除了某些元素(包含'#' char的元素)。当我从循环内部打印lista时,它会打印出来:

['call', '_imprimirArray']
['movl', '24', '%2', '%3']
['movl', '%1', '%2']
['call', '_buscarMayor']
['movl', '%1', '4', '%3']
['movl', '$LC1', '%2']
['call', '_printf']
['movl', '$LC2', '%2']
['call', '_system']
['movl', '$0', '%2']
['movl', '-4', '%2', '%3']

但是当我将每一行追加到另一个2D数组时,只分配了最后一个元素:

['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3'],
['movl', '-4', '%2', '%3']

这是循环:

def quitarEtiquetas(labels, programa):    
    lista = []
    temp = []

    for i in range(0, len(programa)):
        del lista[:]
        for j in range(0, len(programa[i])):
            if(programa[i][j].find('#') != -1):
                labels.append([programa[i][j].replace('#', ''), i])
            else:
                lista.append(programa[i][j])
        print(lista)
        temp.append(lista)

2 个答案:

答案 0 :(得分:4)

您将同一行多次附加到temp,同时只是在每次迭代中从中删除项目。而不是del lista[:]只是为变量分配一个新列表:lista = [],以便以前添加的行中的内容不会被覆盖。

有效地你正在做以下事情:

>>> lista = []
>>> temp = []
>>> lista.append('foo')
>>> temp.append(lista)
>>> temp
[['foo']]
>>> del lista[:]
>>> temp
[[]]
>>> lista.append('bar')
>>> temp.append(lista)
>>> temp
[['bar'], ['bar']]

答案 1 :(得分:1)

添加到niemmi的答案,你需要做的是:

    for i in range(0, len(programa)):
        lista = [] # creates a new empty list object alltogether
        ...

而不是

    for i in range(0, len(programa)):
        del lista[:]; # only clears the content, the list object stays the same

BTW,python中不需要;