/ Elementos de lista de remoção de recursão Python - python, recursion, tail-recursion

Recursão removendo elementos da lista Python - python, recursão, cauda-recursão

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 № 1

Nã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"]))