lambda函数和python中的过滤

时间:2015-08-25 15:46:59

标签: python lambda

我对lambda函数非常困惑。

我有一个主机列表,需要2个过滤方式lt和gt。

这是我的主持人名单 [a1.xxx.com,a2.xxx.com,a90.xxx.com,a100.xxx.com]

我需要使用lambda函数根据主机号(“x”)过滤掉这些主机。因此gt:10应该给我[99, 100]。我只需要主机号码。

首先,我需要从每个主机中提取数字并应用>或者<。

我能够使用列表推导来实现这一点,但代码在lt和gt函数之间重复。我想减少代码重复,lt和gt之间唯一的变量是运算符,其他一切都很常见。有没有办法可以通过lt,gt运算符并使用lambda函数避免代码重复?

使用列表推导的当前代码

def gt(number) :
    host_list = [x.split('.')[0].split('a')[1] for x in hosts if  int(x.split('.')[0].split('a')[1]) > int(number)]
    return host_list

1 个答案:

答案 0 :(得分:0)

如果列表推导之间唯一不同的是比较运算符,则将列表推导放在函数中,并将运算符函数作为参数传递给它。您可以自己定义操作符函数,但在Python的标准库中有一个operator模块,在这种情况下更方便。

import operator

hosts = ['a1.xxx.com', 'a2.xxx.com', 'a90.xxx.com', 'a100.xxx.com']

def filter_hosts(hosts, number, op=operator.gt):
    return [host for host in hosts
            if op(int(host.split('.', 1)[0][1:]), number)]

print(filter_hosts(hosts, 10))
print(filter_hosts(hosts, 10, op=operator.lt))