Если у меня есть список, похожий на
mylist = ["danny","florence","micheal","klrv","yrcv"]
И я хочу удалить строки, в которых нет гласных, и поместить их в новый список, в результате чего у меня будет два списка. Как мне это сделать?
Я пробовал кодировать вручную
mylist_no_vowel = ["klrv","yrcv"]
Затем используйте .remove
, чтобы уменьшить исходный список.
Но я чувствую, что есть код для автоматизации этого вместо того, чтобы делать это вручную.
Быстрый и грязный однострочник:
mylist = ["danny","florence","micheal","klrv","yrcv"]
mylist_no_vowel = [word for word in mylist if not any(character in 'aeiou' for character in word)]
Во второй строке используется синтаксис, называемый пониманием списка, который является идиомой Python для построения списка (в данном случае путем фильтрации другого списка). Код эквивалентен:
mylist = ["danny","florence","micheal","klrv","yrcv"]
mylist_no_vowel = []
for word in mylist:
if not any(character in 'aeiou' for character in word):
mylist_no_vowel.append(word)
При переводе мы начинаем пустой список с именем mylist_no_vowel
, затем перебираем каждое слово в исходном списке mylist
. Для каждого слова мы проверяем, является ли какой-либо из его символов гласным, используя функцию any
. Если это не так, добавляем слово в список mylist_no_vowel
.
Обратите внимание, что я изменил имя вашей переменной начального списка с list
на mylist
, поскольку list
на самом деле является зарезервированным словом в Python — вы перезаписываете встроенную функцию списка, называя переменную таким образом!
Привет, это работает абсолютно нормально, но когда я хочу использовать mylist. Он по-прежнему включает эти две строки. Я просто воспользуюсь функцией .remove, чтобы получить эти строки.
Кроме того, я не знал, но теперь я изменил его на mylist
Вы можете создать третий список (например, mylist_only_vowel
) для хранения всех слов, содержащих хотя бы одну гласную, просто удалив слово not
из моего примера. Это, вероятно, проще, чем пытаться напрямую перерабатывать mylist
.
Следующие коды должны служить этой цели.
mylist = ["danny", "florence", "micheal", "klrv", "yrcv"]
mylist_no_vowel = list(filter(lambda x: set('aeiou') & set(x)==set(), mylist))
print(mylist_no_vowel)
Вот результат, который совпадает с вашим ожидаемым результатом:
['klrv', 'yrcv']
Идея состоит в том, чтобы использовать анонимную функцию для фильтрации каждого элемента x
из mylist
, содержащего гласные, сохраняя каждый элемент x
из mylist
так, чтобы пересечение set(x)
и set('aeiou')
было пустым множеством set()
.
Не вызывайте свой список
list
, он переопределяет встроенную функциюlist
. :)