2016-10-17 17 views
1

私は特定の要素( '#'文字を含む要素)を削除する2次元配列の文字列を持っています。私はループ内からlistaを印刷するとき、この印刷:範囲を含むForループは最後の要素のみを取ります

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

をしかし、私は別の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'] 

をここループは次のとおり

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

*(それは#charを持っていれば)それの特定の要素を削除する* - それはあなたが達成しようとしているものは不明だ – RomanPerekhrest

答えて

4

tempに同じ行を何度も追加していますが、各繰り返しで項目を削除するだけです。 del lista[:]の代わりに、新しいリストを変数lista = []に割り当てて、以前に追加された行の内容が上書きされないようにします。あなたは、次のやっている事実

:あなたが何をする必要があるかniemmiの答えに追加

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

ありがとう、それは動作します –

1

は、次のとおりです。

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

の代わりに、BTW

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

、無; Pythonで必要です。

関連する問題