Python 内置函数之 filter

Posted on 2016-5-5 in Code

介绍

filter 过滤列表中的元素,并且返回一个由所有符合要求的元素构成的列表。符合要求的定义为,针对该元素,函数的返回值为 True。

用法

filter(function, iterable),等同于 [item for item in iterable if function(item)]

例子

比如说,之前在 CheckIO 上有一道测试题,需要验证一个密码的可靠性,要求就是密码长度至少为10位,并且同时包含大写字母,小写字母以及数字。

我的解题思路是使用正则来检查字符串:

import re

def checkio(data):

    #replace this for solution
    is_secure = False
    if len(data) >= 10:
        if re.search('[a-z]', data) and \
           re.search('[A-Z]', data) and \
           re.search('[0-9]', data):
            is_secure = True
    return is_secure

而高票解法用的是 filter,着实让人眼前一亮:

def checkio_highest_vote(data):
    return bool(len(data) >= 10 \
        and filter(lambda a:a.isupper(), data) \
        and filter(lambda a:a.islower(), data) \
        and filter(lambda a:a.isdigit(), data))

另外,据说因为 filter 是一个内置函数,所以它的运行效率比 for 循环更快,这也是推荐的理由之一。