Python编程之筛选序列中的元素

在许多情况下我们会根据需要对序列中的值根据某些标准进行提取或者删减;通常,最简单的使用方法是使用列表推导式(list comprehension):

#encoding=utf-8

if __name__ == '__main__':
    lst = [1,3,5,7,-3,-4,78,3,-6,-2,-45,90]
    [print(n) for n in lst if n < 0]
    print("------------")
    [print(n) for n in lst if n >= 0]

但是使用列表推导式的一个潜在的缺点是如果原始输入非常庞大的话,这么做可能会产生一个庞大的结果,考虑到这个问题,我们改用生成器表达式通过迭代的方式产生筛选的结果

lst = [1,3,5,7,-3,-4,78,3,-6,-2,-45,90]
result = (n for n in lst if n > 0)
for x in result:
    print(x)

有时候筛选的标准没办法简单地表示在列表推导式或者生成迭代器中。比如,假设筛选过程中出现异常或者复杂的细节。基于此,可以讲处理筛选逻辑的代码放到单独的函数中去,然后使用内建的filter()函数处理就可以了

lst = [1,3,5,7,-3,-4,78,3,-6,-2,-45,90,'n/a','s']
def is_int(val):
    try:
        x = int(val)
        return True
    except ValueError:
        return False
result = list(filter(is_int, lst))
print(result)

输出结果为:[1, 3, 5, 7, -3, -4, 78, 3, -6, -2, -45, 90]

注意:filter()创建了一个迭代器,因此如果我们想要的是列表形式的结果,请确保外部使用了list() !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值