Python如何过滤序列元素

  介绍

这篇文章主要讲解了Python如何过滤序列元素,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

<强>问题

你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列

<强>解决方案

最简单的过滤序列元素的方法就是使用列表推导。比如:

在祝辞祝辞mylist=(1、4、5、10、7、2、3、1]   在在在mylist如果n比[n n;0]   (1、4、10、2、3)   在在在[n n mylist如果& lt;0]   (5、7、1)   祝辞祝辞祝辞

使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集,占用大量内存。如果你对内存比较敏感,那么你可以使用生成器表达式迭代产生过滤的元素,比如:

在祝辞祝辞pos=(n, n mylist如果n比;0)   在在在pos   & lt;发电机对象& lt; genexpr>在0 x1006a0eb0>   在在在在pos x:   …打印(x)   …   1   4   10   2   3.   祝辞祝辞祝辞

有时候,过滤规则比较复杂,不能简单的在列表推导或者生成器表达式中表达出来,比如,假设过滤的时候需要处理一些异常或者其他复杂情况。这时候你可以将过滤代码放到一个函数中,然后使用内建的过滤器()函数。示例如下:

在祝辞祝辞mylist=(1、4、5、10、7、2、3、1]
  在在在导入数学
  在在在[math.sqrt为n (n) mylist如果n比;0]
  (1.0,2.0,3.1622776601683795,1.4142135623730951,1.7320508075688772)
  祝辞祝辞祝辞

过滤操作的一个变种就是将不符合条件的值用新的值代替,而不是丢弃它们。比如,在一列数据中你可能不仅想找到正数,而且还想将不是正数的数替换成指定的数。通过将过滤条件放到条件表达式中去,可以很容易的解决这个问题,就像这样:

在祝辞祝辞clip_neg=[n如果n比;其他0 0 n mylist)   在在在clip_neg   [1 4 0 10 0,2,3,0]   在在在clip_pos=[n如果& lt;其他0 0 n mylist)   在在在clip_pos   [0 0 5 0,0,0,1]   祝辞祝辞祝辞

另外一个值得关注的过滤工具就是<代码> itertools.compress() ,它以一个<代码> iterable> 布尔> iterable> 的元素。当你需要用另外一个相关联的序列来过滤某个序列的时候,这个函数是非常有用的。比如,假如现在你有下面两列数据:

在祝辞祝辞出现从itertools进口压缩
  在在在more5=[n比;5 n项)
  在在在more5
  (假的,假的,真的,假的,假的,真的,真的,假的)
  在在在列表(压缩(地址、more5))
  [& # 39;5800 E 58届# 39;,& # 39;1060 W艾迪生# 39;,& # 39;4801 N百老汇# 39;】
  祝辞祝辞祝辞

这里的关键点在于先创建一个<代码>布尔序列,指示哪些元素符合条件。然后<代码>压缩()函数根据这个序列去选择输出对应位置为真正<代码> 的元素。

和<代码>过滤器()函数类似,<代码>压缩()也是返回的一个迭代器。因此,如果你需要得到一个列表,那么你需要使用<代码>列表()来将结果转换为列表类型。

看完上述内容,是不是对Python如何过滤序列元素有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

Python如何过滤序列元素