Вот фиксированная версия:
def remove(seq):
if not seq:
return []
elif isinstance(seq[0], list):
return [remove(seq[0])] + remove(seq[1:])
elif seq[0] in ["a", "e", "i", "o", "u"]:
return remove(seq[1:])
else:
return [seq[0]] + remove(seq[1:])
print(remove(["a", "b", "c", ["d", "e"], "f", "g", "h", "i"]))
Выход:
['b', 'c', ['d'], 'f', 'g', 'h']
Первая ошибка была так, что вы использовали «или» для сравнения с несколько значений. Вы можете написать seq[0] == "a" or seq[0] == "b" or ...
или использовать in
и последовательность, как я. Для повышения производительности гласные можно поместить в набор, например:
vowels = {"a", "e", "i", "o", "u"}
def remove(seq):
if not seq:
return []
elif isinstance(seq[0], list):
return [remove(seq[0])] + remove(seq[1:])
elif seq[0] in vowels:
return remove(seq[1:])
else:
return [seq[0]] + remove(seq[1:])
print(remove(["a", "b", "c", ["d", "e"], "f", "g", "h", "i"]))
Ваша вторая ошибка была с последним return
заявление. Вы попытались присоединиться к строке перед списком с помощью оператора +
. Эффективно вы делали что-то вроде "b" + ["c"]
, что вызывает ошибку. Вы не можете добавить список и не-список вместе с +
.
В-третьих, чтобы сохранить структуру вложенных списков, мне пришлось обернуть возвращаемое значение remove() в списке, в случае, когда у нас был вложенный список return [remove(seq[0])] + remove(seq[1:])
.
Потому что ваш базовый регистр должен вернуть пустой список. Кроме того, 'seq [0] ==" a "или" e "или" i "или" o "или" u "' не делает того, что вы думаете. –
Пожалуйста, создайте [Минимальный, компактный, проверяемый пример] (http://stackoverflow.com/help/mcve). В этом контексте это означает: как вы запускаете этот код? Что не работает, точно? – DilithiumMatrix
Вам также нужно вернуть пустую строку в первом условии 'if'. – Kasramvd