专栏首页盛开在夏天的太阳内置函数 -- filter 和 map

内置函数 -- filter 和 map

参考地址:http://www.cnblogs.com/sesshoumaru/p/6000788.html

英文文档:

filter(function, iterable)

Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.

Note that filter(function, iterable) is equivalent to the generator expression (item for item in iterable if function(item)) if function is not None and (item for item in iterable if item) if function is None.

See itertools.filterfalse() for the complementary function that returns elements of iterable for which function returns false.

说明:

  1. filter函数用于过滤序列。过滤的方式则是采用传入的函数,去循环序列的元素调用,如果函数计算的结果为True则保留元素,否则将舍弃该元素。

>>> a = list(range(1,10)) #定义序列
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def if_odd(x): #定义奇数判断函数
    return x%2==1

>>> list(filter(if_odd,a)) #筛选序列中的奇数
[1, 3, 5, 7, 9]

  2. 当function参数传入None时,序列中的元素值如果为False,也会自动舍弃。

>>> c = ['',False,'I',{}] #定义序列
>>> c
['', False, 'I', {}]

>>> list(filter(None,c)) #筛选函数为None,自动舍弃序列中的False值,空字符串、False值、空序列都是False值,所以丢弃
['I']

总结 : 简单的说(来自老男孩python全栈课程)

  filter: 过滤,符合条件的选取,不符合条件的过滤掉
  filter有两个参数, 第一个参数是一个函数, 第二个参数是一个可迭代的对象.  循环遍历第二个参数, 取出每一个,执行第一个函数,执行函数的结果返回ture,符合条件则留下,如果返回false,就是不满足条件
def f1(x):
    if x>20:
        return True
    else:
        return False

r1 = filter(f1,[11,22,33,44])

for i in r1:
    print(i)

当函数是一个很简单的表达式时,可以使用lambda表达式

r2 = filter(lambda x : x > 22,[11,22,33,44])
for i in r2:
    print(i)
map和filter是类似的.
  map: 对可迭代的集合中的每一个元素,传递到第一个函数中, 返回执行结果
  map有一个固定参数,一个可变参数, 第一个参数是一个函数, 可变参数是可迭代的对象.
#对集合中的内一个元素都加20
def m1(x):
    return x+20
m = map(m1, [1, 2, 3, 4, 5])
print(list(m))

  返回结果:

[21, 22, 23, 24, 25]
map的可变参数传递, 可以参考下面的内容, 转自文章http://www.cnblogs.com/sesshoumaru/p/6031819.html

英文文档:

map(function, iterable, ...)Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, functionmust take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted. For cases where the function inputs are already arranged into argument tuples, see itertools.starmap().说明:  1. 函数接受一个函数类型参数、一个或者多个可迭代对象参数,返回一个可迭代器,此迭代器中每个元素,均是函数参数实例调用可迭代对象后的结果。

>>> a = map(ord,'abcd')
>>> a
<map object at 0x03994E50>
>>> list(a)
[97, 98, 99, 100]

  2. 当传入多个可迭代对象时,函数的参数必须提供足够多的参数,保证每个可迭代对象同一索引的值均能正确传入函数。

>>> a = map(ord,'abcd')
>>> list(a)
[97, 98, 99, 100]
>>> a = map(ord,'abcd','efg') # 传入两个可迭代对象,所以传入的函数必须能接收2个参数,ord不能接收2个参数,所以报错
>>> list(a)
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    list(a)
TypeError: ord() takes exactly one argument (2 given)

>>> def f(a,b):
    return a + b

>>> a = map(f,'abcd','efg') # f函数可以接受2个参数
>>> list(a)
['ae', 'bf', 'cg']

  3. 当传入多个可迭代对象时,且它们元素长度不一致时,生成的迭代器只到最短长度。

>>> def f(a,b):
    return a + b

>>> a = map(f,'abcd','efg') # 选取最短长度为3
>>> list(a)
['ae', 'bf', 'cg']

  4. map函数是一个典型的函数式编程例子。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python内置函数-compile()

      这个函数有什么用呢? 一个最简单的例子, 就是我们的代码, 会被解释器读取,解释器读取后的其实是字符串, 然后通过compile编译后, 又转换成pytho...

    用户7798898
  • 3. Kubernetes集群安装

    采坑备注: . Mac版本的幸好是 MacOS Mojave 10.14.6, 这个版本下, 安装了3款虚拟机, 均不成功. 别人的虚拟机一按就好, 就我的哪款...

    用户7798898
  • Python内置函数(21)——filter

    Construct an iterator from those elements of iterable for which function returns...

    用户7798898
  • JS函数

    形式参数 : 在函数声明时, 设置的参数。作用:占位置 ,只能在函数内部使用. 实际参数 : 在函数调用时,传入的参数。 作用 : 函数调用时,会把实参的值赋...

    羊羽shine
  • 巧妙算法背后的直觉:浅谈贝叶斯优化之美

    假设有一个函数F(x),已知计算成本很高,且解析式和导数未知。问:如何找到全局最小值?

    AI科技评论
  • 《Linux命令行与shell脚本编程大全》第十七章 创建函数

    可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了。 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任...

    xcywt
  • Python进阶|谈谈几个常用的内置函数

    但是我们有没有想过,如果我们需要一个函数,比较简短,而且只需要使用一次(无需重复调用),那还需要定义一个有名字的函数么?

    罗罗攀
  • Python高阶函数

    在了解什么是高阶函数之前,我们来看几个小例子。我们都知道在 python 中一切皆对象,函数也不例外。比如求绝对值函数 abs,我们可以用一个变量 f 指向 a...

    Python编程与实战
  • 【玩转腾讯云】那些天,我学习的腾讯云函数

    腾讯家的产品我用很久了,而腾讯云函数是让我印象最深刻的,可以说,我见证了腾讯云函数的诞生、成长和发展。

    浅墨233
  • Python下小米加步枪lambda和相关函数使用

    lambda定义匿名函数,并不会带来程序运行效率的提高,只会使代码更简洁, 为了减少单行函数的定义而存在的。

    后场技术

扫码关注云+社区

领取腾讯云代金券