• 2-2 列表推导同 filter 和 map 的比较


    列表推导同 filter 和 map 的比较

    参考廖雪峰的文档:

    • filter()函数:用于过滤序列。

    filter()接收一个函数和一个序列。把传入的函数依次作用于传入的序列的每个元素,根据返回值是True还是Fasle决定保留还是丢弃该元素。

    例如,忽略列表中的数字,只保留字符:

    def is_char(l):
        if not isinstance(l, int):  # 判断传入的参数是否非整型
            return l
    li = [i for i in filter(is_char, ['dd', 12, 'rr!', 22, 34])]
    print(li)
    
    li1 = list(filter(is_char, ['dd', 12, 'rr!', 22, 34]))
    print(li1)
    
    li2 = list(filter(lambda l: not isinstance(l, int) , ['dd', 12, 'rr!', 22, 34]))
    print(li2)
    >>>
    ['dd', 'rr!']
    ['dd', 'rr!']
    ['dd', 'rr!']

    廖雪峰讲解filter()函数中,有一道题是删除1-100中的素数:

    # 尝试用filter删除1-100的素数
    def is_not_prime(i):
        if i == 1:
            return True
        for n in range(2, i):
            if i % n == 0:
                return True
        return False
    print(is_not_prime(2))
    li3 = list(filter(is_not_prime, range(1,101)))
    print(li3)
    >>>
    False
    [1, 4, 6, 8, 9, 10, 12, ...]

    可以在debug模式下运行,了解这段程序的运行过程。

    • map()函数:利用map()函数,可以把一个list转换为另一个list,所以,map()函数需要传入两个:一个方法和一个列表。

    示例:参考博客

    # 1.map提取字典的key
    l = list(map(int, {1: 2, 2: 3, 3: 4}))
    print(l)
    >>>
    [1, 2, 3]
    # 对列表中的英文姓名进行处理,首字母大写,其他字母小写
    A = ['ada', 'JOY', 'Kitty', 'LUCy', 'LouiCs', 'CIci']
    
    def deal_name(s):
        sd = s[0].upper() + s[1:].lower()
        return sd
    
    B = list(map(deal_name, A))
    print("转换后的名字列表: %s" %B)
    print("转换前的名字列表: %s" %A)
    >>>
    转换后的名字列表: ['Ada', 'Joy', 'Kitty', 'Lucy', 'Louics', 'Cici']
    转换前的名字列表: ['ada', 'JOY', 'Kitty', 'LUCy', 'LouiCs', 'CIci']
    • map()和filter()的组合使用
    symbols = '$¢£¥€¤'
    beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
    print(beyond_ascii)
    
    beyond_ascii1 = list(filter(lambda c: c > 127, map(ord, symbols)))
    print(beyond_ascii1)
    >>>
    [162, 163, 165, 8364, 164]
    [162, 163, 165, 8364, 164]
  • 相关阅读:
    python中的对象
    在python中是没有NULL的,取而代之的是None,它的含义是为空
    Python将列表作为栈和队列
    Python的数据类型3元组,集合和字典
    1
    Python的数据类型2列表
    _Python定义方法
    IDEA
    Docker-compose.yml 基础使用
    Nginx 前后端分离, 多个二级域名配置
  • 原文地址:https://www.cnblogs.com/catleer/p/6864453.html
Copyright © 2020-2023  润新知