Skip to main content
 首页 » 编程设计

python之带范围的for循环只取最后一个元素

2025年05月04日24jyk

我有一个二维字符串数组,我从中删除了某些元素(那些包含“#”字符的元素)。当我从循环内部打印 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'] 

但是当我将每一行附加到另一个二维数组时,只会分配最后一个元素:

['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']]