有人可以解释为什么下面的代码会产生一个元音列表吗?似乎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)
答案 0 :(得分:2)
将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
>>>
答案 1 :(得分:1)
此处filter
功能会过滤元音字符
filter(lambda x: x[0] in "aeiou", nameFull)
示例:nameFull
='hello'
第1步:
lambda x:x[0] in "aeiou", 'hello'
在此步骤中,x[0]
为h
。因此条件失败为h
而不是aeiou
第二步:
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']