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]

转载于:https://www.cnblogs.com/catleer/p/6864453.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值