2016-10-17 90 views
1

我有一个从中删除某些元素(包含'#'字符)的字符串的二维数组。当我打印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) 
+1

*我删除了它的某些元素(如果它有#字符)* - 它不清楚你试图实现什么 – RomanPerekhrest

回答

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']] 
+0

谢谢,它可以工作 –

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中。

相关问题