filter函数多对多的用法(filter函数如何添加多个条件)

http://www.itjxue.com  2023-01-25 00:22  来源:未知  点击次数: 

python中的filter函数怎么用

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:

def is_odd(x):

return x % 2 == 1

然后,利用filter()过滤掉偶数:

filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

结果:

[1, 7, 9, 17]

利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:

def is_not_empty(s):

return s and len(s.strip()) 0

filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])

结果:

['test', 'str', 'END']

注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。

当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:

a = ' 123'

a.strip()

'123'

a = '\t\t123\r\n'

a.strip()

'123'

练习:

请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

方法:

import math

def is_sqr(x):

return math.sqrt(x) % 1 == 0

print filter(is_sqr, range(1, 101))

结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

js中filter过滤用法总结

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组。

| 参数 | 描述 |

| function(currentValue, index,arr) | 必须。函数,数组中的每个元素都会执行这个函数

函数参数:

| 参数 | 描述 |

| currentValue | 必须。当前元素的值 |

| index | 可选。当期元素的索引值 |

| arr | 可选。当期元素属于的数组对象 |

|

| thisValue | 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。

如果省略了 thisValue ,"this" 的值为 "undefined" |

首先回顾一下filter的作用:过滤数组中符合条件的元素

另外也可以用来过滤对象数组中符合条件的对象,eg:

|

目前比较常用的方法是使用ES6的set完成,eg:

结合map使用可以先过滤出符合条件的对象然后去除某些不需要的字段,比如:

简单讲filter就是一个数组过滤器,参数接收一个函数,数组的每一项经过函数过滤,返回一个符合过滤条件的新数组

函数接收三个参数:

Excel技巧之FILTER函数

在以下示例中,我们使用公式 =FILTER(A5:D20,C5:C20=H2,"") 返回包含“苹果”(如单元格 H2 中所选定)的所有记录,如果没有“苹果”,则返回空字符串 ("")。

示例

用于返回多个条件的 FILTER

在此示例中,我们使用乘法运算符 ( ),以返回数组范围 (A5:D20) 中包含“苹果”且位于东部区域的所有值:=FILTER(A5:D20,(C5:C20=H1) (A5:A20=H2),"")。

Office 365新增的Filter查询函数,完爆Vlookup函数

VLOOKUP函数是我们在日常工作中使用频率非常高的一查询函数,我们可以用VLOOKUP函数,根据一个查询条件,比如员工编号,找到该员工在人事信息表中的部门、职务等信息,也可以在工资表中找到其对应的工资数据。

VLOOKUP很实用,不过它有三大缺点:

01 只能根据左侧的查询条件返回右侧的结果

比如下图所示的这个表格,我们可以根据员工编号找到员工姓名,但是如果想要用VLOOKUP函数根据员工姓名查询员工编号,是做不到的,除非结合到IF函数形成虚拟表。

02 无法直接屏蔽查询不到返回的#N/A的结果

如果查询结果中有很多查找不到的数据,就会出现大量的#N/A的错误信息,想要隐藏这些#N/A,必须要结合到IFERROR函数。

03 无法直接实现多条件查询

必须建立辅助列或者通过数组公式的方法来实现。

04 无法一次带出符合查询条件的多个结果

比如将上一张图左侧的表格的数据,按照订单编号的条件,展示所有A订单的商品型号到金额的数据到下图所示的表格中。需要结合到MATCH函数,通过复杂的函数嵌套才能实现。

而如果你使用的Office是365的版本,就可以利用365中新增的FILTER函数,既可以实现现有VLOOKUP函数具备的功能,还可以实现刚刚提到的VLOOKUP做不到的四项功能。

我们先来来看看FILTER的语法:

FILTER(数据区域,筛选条件,[无满足条件的记录时返回的值])

现在我们通过一些案例来系统学习FILTER函数的用法。

单条件查询也就是实现VLOOKUP函数的功能。比如下图中我们需要根据员工编号查询员工姓名,只需要输入函数:

=FILTER(B2:B11,A2:A11=D3,"")

第一个参数B2:B11是需要返回的结果列,这个参数可以是一列也可以是多列。第二个参数A2:A11=D3是筛选条件,等号左侧的是数据源表中的条件范围列,右侧则是结果列中的查询条件。第三个参数是如果找不到符合条件的数据的返回结果,这里输入的""表示空。

因为FILTER函数不像VLOOKUP函数那样,必须将条件列和结果列都包含到数据区域中,这样我们就可以任意选择结果列,也就可以解决VLOOKUP不能实现逆向查询的问题。

而且也不用借助IFERROR函数隐藏查找不到时返回的#N/A的错误信息了。

当有多个查询条件时,用“+”表示条件“或”,“或”是指多个条件中只要一个满足的情况;用“*”表示条件“与”,“与”是指多个条件必须同时满足的情况。

比如下图所示的案例,我们要查询A订单中1847这款商品的销售额,这就是与的情况,多个条件需要同时满足。这里输入的公式是:

=FILTER($H$2:$H$15,($A$2:$A$15=J2)*($D$2:$D$15=K2),"")

每个条件放在一对()中,中间用*号连接,可以继续往后连接条件。

如果想要一次返回符合条件的多列的数据,可以在第一个参数中选择多列。比如下图所示的这个案例。

这里第一个参数我们输入的是2列的数据,这样返回的结果就有2列,而通过+号则表示符号条件的数据有2个,这样返回结果就有2行2列。我们无须选择像以前数组公式那样选择多行多列,只需要将光标放在一个单元格中,比如这里的D3单元格,公式会自动将结果扩展到右侧和底部。

而且使用Filter函数我们都不需要使用绝对引用,因为它们仅存在于一个单元格中,并将其结果溢出到相邻单元格。

我们再用这个案例用动图感受一下FILTER函数的强大之处。

当我们改变订单编号的条件,底部的数据就会动态更新。

这个Office 365新增的Filter查询函数,是不是完爆Vlookup函数呢?

DAX从入门到精通 3-4-1 了解filter函数

filter函数很简单:传入一个表格,然后返回一个和原来列相同的表格,但是只会保留符合条件的行。

filter的语法如下:

filter函数对table进行迭代,每行都会判断是否符合条件,然后返回布尔值。当条件为true的时候,filter返回该行,否则跳过。

注意:

从逻辑角度出发,filter函数对table表每行执行条件判断。但是DAX内部在执行判断的时候,会使用优化的处理方式,会使用对列去重的方式来减少判断的数量。判断的数据,实际上是等于filter函数处理表的粒度。这个粒度情况决定的了filter函数的性能,这个也是一个DAX优化的一个重要点。

例如,下面这个查询只选择brand = "Fabrikam":

可以在filter函数内嵌套filter函数,因为可以使用一个表函数来作为filter的参数。filter首先执行的是最内部的filter,通常,嵌套两个过滤器会产生相同的结果和使用AND函数中包含的逻辑条件的组合相同。也就是,下面的语句会得到相同的结果:

但是,这两个公式在table表含有非常多行或者非常复杂的时候,性能会有很大的差距。例如下面这个查询,返回价格是成本三倍的fabrikm的产品。

这样的查询会把两个条件都添加到product表的所有行进行判断。因此,你可以更改下,如果你有两个条件,其中一个运行更快且更容易,你可以使用filter的嵌套形式,先处理这个过滤条件。例如。下面的查询,先过滤了price和cost,然后再过滤brand = ‘Fabrikam’,最终达成结果。

如果你调整一下顺序,那么执行的顺序也调整了。如下的先过滤了‘Fabrikam’,然后再过滤price和cost。

这点对于DAX表达式的优化非常有用。你可以选择先运行更高效的过滤条件。但是,在没有完全掌握上下文的时候,不要开始使用这种方法来优化语句。在第16章中,我们会深入的讨论这个优化。这个案例的作用只是让你意识到嵌套时候的运算顺序。

划重点:

通常情况下,对于嵌套的函数,顺序总是从最内部开始然后向外到最外部。但是calculate和calculatetable不同,这个是因为对于参数的特殊评估条件。很多情况下,我们会在相似的情况下使用filter和calculatetable函数,使用的时候我们要注意它们的区别。

filter函数的用法是什么?

filter函数的用法,下面进行举例说明:

例如一个公司,需要找出年销售额超过2000万的城市销售金额,这个利用简单的表达式已无法解决,根据FILTER来实现。

1、销售总额 = sum('销售明细'[销售额])

2、再建一个度量值[大于2000万的城市销售金额]= CALCULATE([销售总额],FILTER(ALL('门店城市'),[销售总额]20000000))。

3、超过2000万销售额的城市的销售额总计等于451026000,但发现上面明细的两个数字之和并不等于总计,这正是PowerBI中数据模型的特点。

一、Filter新增加的功能包括:

1、新的国际化。

2、应用程序生命周期事件控制。

3、澄清了类的装载规则。

4、新的错误及安全属性。

5、不赞成使用HttpUtils 类。

6、各种有用的方法。

二、一个filter必须实现javax.servlet.Filter的三个方法:

1. void setFilterConfig(FilterConfig config) //设置filter 的配置对象。

2. FilterConfig getFilterConfig() //返回filter的配置对象。

3. void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) //执行filter 的工作。

(责任编辑:IT教学网)

更多

推荐Oracle认证文章