Python Cookbook 1.16 筛选序列中的元素

找出列表中的正数:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]

[n for n in mylist if n > 0]
Out[48]: [1, 4, 10, 2, 3]

上面的方法叫做列表推导式,但是如果原始的输入非常大,可能会产生一个庞大的结果。
如果这是你需要考虑的问题,可以使用生成器表达式通过迭代的方法产生筛选的结果。

(n for n in mylist if n > 0)
Out[49]: <generator object <genexpr> at 0x00000253E4F80780>

有时候筛选的条件很复杂,没办法在列表推导式中使用,可以将其放到函数里,然后通过内建函数 filter 来处理:

values = ['1', '2', '-3', '-', '4', 'N/A', '5']
def is_int(val):
    try:
        x = int(val)
        return True
    except:
        return False
   
list(filter(is_int, values))
Out[54]: ['1', '2', '-3', '4', '5']

对筛选结果进行处理:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]

import math

[math.sqrt(n) for n in mylist if n > 0]
Out[58]: [1.0, 2.0, 3.1622776601683795, 1.4142135623730951, 1.7320508075688772]
[n if n > 0 else 0 for n in mylist]
Out[60]: [1, 4, 0, 10, 0, 2, 3, 0]

itertools.compress
这是一个筛选工具,接受一个可迭代对象以及一个布尔选择器序列作为输入,输出时会给出所有在相应的布尔选择器中为 True 的可迭代对象,作用于把一个序列的筛选结果施加到另一个相关的序列上。

from itertools import compress
morethan3 = [n > 3 for n in counts]
morethan3
Out[65]: [True, False, False, True, False, False]

list(compress(counts, morethan3))
Out[66]: [4, 7]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值