列表推导同 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]

2-2 列表推导同 filter 和 map 的比较的更多相关文章

  1. python列表推导同filter和map的比较

    首先介绍下filter和map: filter: filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元 ...

  2. 第7条:用列表推导式来取代map和filter

    核心知识点: 1.列表推导式要比内置的map和filter函数清晰,因为它无需额外编写lambda表达式. 2.列表推导式可以跳过输入列表中的某些元素,如果改用map来做,那就必须辅以filter方能 ...

  3. [PY3]——过滤数据——列表推导、filter()、itertools.compress()

    问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤数据的方法,就是使用列表推导. 使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集 ...

  4. 转:Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)

    Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...

  5. Python里的map、reduce、filter、lambda、列表推导式

    Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...

  6. python3 map,filter和列表推导式

    num_list = [11,2,-33,10,7,3,5,43] 1.filter  函数 获取num_list大于5的元素,并返回列表 用lambda表达式实现: # 在python2 中 fil ...

  7. Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)

    Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...

  8. 列表推导式、生成器表达式以及zip()max()max()/min()sum()sort()map()filter()的用法

    列表推导式: 基本格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] #out_exp_res: 列表生成元素 ...

  9. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

随机推荐

  1. C++虚函数表剖析

    关键词:虚函数.虚表,虚表指针,动态绑定,多态 一.概述 为了实现C++的多态,C++使用了一种动态绑定的技术. 这个技术的核心是虚函数表(下文简称虚表).本文介绍虚函数表是怎样实现动态绑定的. 二. ...

  2. 我和nupt集训队的故事

    纯水文,如有不适请ctrl+w撤离 亚洲赛刚结束.看了不少巨巨的退役贴以及岛娘在知乎上的那篇感天动地的人生经历.多少有点夜深忽梦少年事的错觉.作为一个两年前就打出gg的高龄选手,之后又强行以1次队员和 ...

  3. java创建线程的三种方式及其对照

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行 ...

  4. HttpURL连接远程serverGet和Post方式请求并返回数据

    查看原文:http://www.ibloger.net/article/1813.html package cn.gis; import java.io.BufferedReader; import ...

  5. web 开发之js---JS变量也要注意初始化

    原先以为js作为弱类型语言,变量的初始化没必要,但是: var text; text+="你好"; alert(text); 对话框弹出的内容是:"undefined你好 ...

  6. iOS 特定图片的button的旋转动画

    近期做的东西中,要为一个有特定图片的button加入旋转动画,Demo代码例如以下: #import "ViewController.h" @interface ViewContr ...

  7. cocos2dx 在android平台打开文件问题

        我们有一个项目是基于cocos2dx + lua,在网络部分用到了protobuf, 在初始化protobuf的时候须要读取本地文件,用lua的io.open读取文件在windows,ios上 ...

  8. 10.6 Graph Test

    一套图论的练习题,各个方面都有挺好的 第一第二题有一定难度(来源POI),第三第四题比较水 但我并没考好 T1 特工 szp T2 洞穴 zaw T3 最短路 line T4 最小差异值 dvalue

  9. 10.05FZSZ Day2模拟总结

    今天的题目难度比昨天小一些,但是太菜的我还是啥也不会. 今天的出题大佬是Heaplex,他的题目中倒是出现了ZZQ,不知道是否是本人? T1.a 期望得分30,实际得分30 这道题开场发现好像有什么小 ...

  10. bzoj2157 旅游——LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 仍然是LCT模板题~ 不过有一些需要注意的地方,点和边的区分,0号点的 mx 和 mn ...