#python #arrays #list #python-3.x #multidimensional-array
#python #массивы #Список #python-3.x #многомерный массив
Вопрос:
У меня есть 2D-массив строк, из которого я удаляю определенные элементы (те, которые содержат символ ‘#’). Когда я печатаю 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)
Комментарии:
1. то, что я удаляю его определенные элементы (если у него есть # char) — неясно, чего вы пытаетесь достичь
Ответ №1:
Вы добавляете одну и ту же строку много раз 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']]
Ответ №2:
Добавляя к ответу нимми, что вам нужно сделать, это:
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 нет необходимости.