簡體   English   中英

帶范圍的循環僅占用最后一個元素

[英]For-loop with range is only taking the last element

我有一個二維字符串數組,從中刪除某些元素(那些包含'#'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)

您要向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']]

除了涅米的答案,您需要做的是:

    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

順便說一句,沒有; 在python中需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM