zoukankan      html  css  js  c++  java
  • filter函数和map函数

    filter

    filter()函数接收一个函数 f 和一个可迭代对象,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的filter对象(一个迭代器)。

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

    def is_odd(x):
        return x % 2 == 1

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

    >>>list(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
    >>>list(filter(is_not_empty, ['test', None, '', 'str', '  ', 'END']))

    结果:

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

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

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

    >>> a = ' 123'
    >>> a.strip()
    '123'

    >>> a = ' 123 '
    >>> 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 list(filter(is_sqr, range(1, 101)))

    结果:

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

    map

    Python中的map函数应用于每一个可迭代的项,返回的是一个结果迭代器。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为map对象返回。

    有一个list, L = [1,2,3,4,5,6,7,8],我们要将f(x)=x^2作用于这个list上,那么我们可以使用map函数处理。

    l=[1,2,3,4]
    def pow2(x):
        return x*x
    
    print(map(pow2,l))  #<map object at 0x02EF5530>
    print(list(map(pow2,l)))    # [1, 4, 9, 16]
    print(tuple(map(pow2,l)))   # (1, 4, 9, 16)
    >>>def square(x) :            # 计算平方数
    ...     return x ** 2
    ... 
    >>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
    [1, 4, 9, 16, 25]
    >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
    [1, 4, 9, 16, 25]
     
    # 提供了两个列表,对相同位置的列表数据进行相加
    >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    [3, 7, 11, 15, 19]

    如果函数有多个参数, 但每个参数的序列元素数量不一样, 会根据最少元素的序列进行:

    >>> listx = [1,2,3,4,5,6,7]       # 7 个元素
    >>> listy = [2,3,4,5,6,7]         # 6 个元素 
    >>> listz = [100,100,100,100]     # 4 个元素
    >>> list_result = map(lambda x,y,z : x**2 + y + z,listx, listy, listz)
    >>> print(list(list_result))
    [103, 107, 113, 121]

    明显可以看出是由于 lambda 中的 z 参数,实际是使用了 listz, 而 listz 里面只有 4 个元素, 所以即使 listx 有 7 个元素, listy 有 6 个元素,也不会继续执行了,只执行了 4 个元素的的计算。

  • 相关阅读:
    常用的android弹出对话框
    AutoCompleteTextView与TextWatcher的结合
    As of ADT 14, resource fields cannot be used as switch cases
    Linux中tshark(wireshark)抓包工具使用方法详解
    php模板引擎
    php中实现精确设置session过期时间的方法
    什么情况下会调用到session_destroy()
    PHPSession-完全PHP5之session篇
    彻底理解PHP的SESSION机制
    闪迪U3利用工具U3-Pwn
  • 原文地址:https://www.cnblogs.com/huchong/p/8296453.html
Copyright © 2011-2022 走看看