试图了解lambda

oue*_*uea 4 python

当我做

dict = {'Alice': '7898', 'Beth': '9102', 'Cecil': '3258'}
print filter(lambda x: x, dict['Alice'])
Run Code Online (Sandbox Code Playgroud)

它显示:7898

当我做下一个

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
print filter(lambda x: x=="2341", dict['Alice'])
Run Code Online (Sandbox Code Playgroud)

表明:

为什么它没有显示真实.如何获得真实?

lun*_*chs 5

filter()执行以下操作:给定一个函数和一个iterable(如列表,元组等),将列表中的每个项目传递给一个函数.对于每个项目,该函数返回布尔值true或false.如果函数在项目上返回true,则该项目将添加到新列表中.

过滤完成后,将返回包含所有选定项目的新列表.这允许您根据条件"筛选"列表,并仅选择符合条件的项目.

这里发生了一件棘手的事情.filter()循环遍历任何iterable.这包括一个字符串.当你传递dict ['Alice']作为迭代对象时,它传递'2341',并在字符串中的每个字符上运行过滤器.你可以按如下方式打破过滤器的逻辑:

def matches(x):
    return x == '2341'

result = ''
for char in x:
    if matches(char):
         result += char

print result
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为你的个人角色都不等于'2341'.