precisa escrever uma função recursiva para remover elementos da lista, mas manter os arrays no resultado, como.
def remove_words(listx):
for element in listx:
if isinstance(element, list):
remove_words(element)
else:
listx.remove(element)
return listx
remove_words(["a", "b", ["c"]])
retornaria [[]]
Meu código retorna ["b",[]]
por alguma razão está faltando um elemento.
Respostas:
2 para resposta № 1Não remova elementos de uma coleção enquanto iterar. Chamadas repetidas para list.remove
também não são ideais em relação ao desempenho, já que cada remoção (de um índice aleatório) é O(N)
. Um caminho simples em torno de ambos os problemas seria a seguinte compreensão:
def remove_words(listx):
return [remove_words(e) for e in listx if isinstance(e, list)]
O caso base aparentemente ausente é uma lista sem listas aninhadas em que uma lista vazia é retornada.
Se você quiser modificar a lista no local, poderá usar a atribuição de fatia:
def remove_words(listx):
listx[:] = [remove_words(e) for e in listx if isinstance(e, list)]
0 para resposta № 2
def remove_words(listx):
if listx == []:
return []
elif not isinstance(listx[0], list):
return remove_words(listx[1:])
else:
return [remove_words(listx[0])] + remove_words(listx[1:])
print(remove_words(["a", "b", ["c"]]))
print(remove_words(["a", ["b",["c","d"],"c"], [["f"],["g"]],"h"]))