2016-10-17 2 views
1

특정 요소 ('#'char 포함)를 삭제하는 문자열의 2D 배열이 있습니다.범위가있는 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 차원 배열에 각 행을 추가 할 때, 마지막 요소는 할당 : 내가 루프 내부에서 lista를 인쇄 할 때,이 인쇄 여기

['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 = [] 변수에 새 목록을 지정하면 이전에 추가 한 행의 내용을 덮어 쓰지 않아도됩니다. 당신이 다음을 수행하고 효과적으로

: 당신이해야 할 일을 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 

, 아니 ; 파이썬에서 필요합니다.

관련 문제