元音列表:奇怪的lambda表达式

2024-09-28 16:57:39 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下为什么下面的代码会产生元音列表吗?似乎lambda表达式应该只查看字符串的第一个字母,但不知何故它收集了“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)

Tags: lambda字符串代码name列表inputyour表达式
2条回答

nameFull传递给filter将导致字符串的每个单独字符作为x发送到lambda。里面的[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
>>> 

这里,filter函数过滤元音字符

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

示例:nameFull='hello'

第一步:

^{pr2}$

在这个步骤中x[0]是{}。所以条件失败,因为h不在aeiou

第二步:

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

在这个步骤中x[0]e。因此,条件为eaeiou中为真。它被过滤了。在

对字符串中的其他字符也是如此。在

最后,过滤后的结果被转换成list

^{4}$

输入:

hello

输出:

['e','o']

相关问题 更多 >