Список гласных: странное лямбда-выражение - PullRequest
0 голосов
/ 20 мая 2018

Может кто-нибудь объяснить, почему следующий код производит список гласных?Кажется, что лямбда-выражение должно смотреть только на первую букву строки, но каким-то образом оно собирает все символы строки, находящиеся в «aeiou»:

nameFull = input("Please enter your name: ")
nameBroken = nameFull.split()

print(list(filter(lambda x: x[0] in "aeiou", nameFull)))

#(i.e. if nameFull = hello, ["e", "o"] is the result)

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Здесь функция filter фильтрует гласные символы

filter(lambda x: x[0] in "aeiou", nameFull)

Пример: nameFull = 'hello'

1-й шаг:

lambda x:x[0] in "aeiou", 'hello'

На этом шаге x[0] равен h.Таким образом, условие не выполняется: h не в aeiou

2-й шаг:

lambda x:x[0] in "aeiou", 'ello'

На этом шаге x[0] равен e.Таким образом, условие истинно как e в aeiou.Он фильтруется.

Таким же образом для других символов в строке.

Наконец, отфильтрованный преобразуется в list

list(filter(lambda x: x[0] in "aeiou", nameFull))

Ввод:

hello

Вывод:

['e', 'o']

0 голосов
/ 20 мая 2018

Передача nameFull в filter приведет к тому, что каждый отдельный символ строки будет отправлен на lambda как x.[0] внутри является избыточным и не обязательным;он просто захватывает первый символ x, который уже является односимвольной строкой.Вы, вероятно, должны удалить его для удобства чтения.

Ниже приведена демонстрация:

>>> nameFull = input("Please enter your name: ")
Please enter your name: Robert
>>> 
>>> print(list(filter(lambda x: x in "aeiou", nameFull))) # Works fine without [0].
['o', 'e']
>>>
>>> 'a'[0] # [0] does nothing.
'a'
>>> 'a'[0] == 'a'
True
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...