/ / Рекурсия премахване на елементи от списъка Python - python, recursion, tail-recursion

Рекурсиране за премахване на елементите в списъка Python - python, recursion, tail-recursion

трябва да напишете функция recurive, за да премахнете елементите от списъка, но запазете масивите в резултат като.

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"]]) ще се върне [[]]

Моят код се връща ["b",[]] поради някаква причина липсва елемент.

Отговори:

2 за отговор № 1

Не премахвайте елементи от колекция, докато я преглеждате. Повтарящи се обаждания към list.remove също не са идеални, тъй като всяко премахване (от произволен индекс) е O(N), Един прост начин около двата въпроса ще бъде следното:

def remove_words(listx):
return [remove_words(e) for e in listx if isinstance(e, list)]

На пръв поглед липсващия случай е списък без вложени списъци, където се връща празен списък.

Ако искате да модифицирате списъка на място, можете да използвате присвояване на среза:

def remove_words(listx):
listx[:] = [remove_words(e) for e in listx if isinstance(e, list)]

0 за отговор № 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"]))