内置函数(sorted、map、enumerate、filter、reduce)
1、sorted()
语法:
sorted(iterable, cmp=None, key=None, reverse=False)
把iterable中的items进行排序之后,返回一个新的列表,原来的iterable没有任何改变
1、iterable:iteralbe指的是一个可迭代类型。iterable主要包括3类:
注意:
列表本身还有自己sort方法,它的作用和sorted一样,都是用来排序的,但是sort方法是对原列表本地进行排序,而sorted方法是会生成一个新的列表,原列表内容不变 示例:
L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f(x):
return len(x)
L.sort(key=f) # 使用列表本身的sort的方法,修改原列表
print(L)
# 输出 :[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}] L1 = sorted(L,key=f) # 使用sorted方法,返回一个新列表
print(L1)
# 输出 :[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
print(L)
# 输出 :[{1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}, {1: 9}]
list.sort()和sorted()方法都有一个key参数来说明一个函数,这个函数在做比较之前会对list中的每个元素进行调用。
一个大小写不敏感的字符串比较:
newStr = sorted("This is a test string from Andrew".split(), key=str.lower)
print (newStr)
# 输出 :['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。这种技术比较快,原因在于对每个输入记录,这个函数只会被调用一次。
对复杂对象的比较通常是使用对象的切片作为关键字。例如:
student_tuples = [('Jerry', 'A', 15), ('Tom', 'C', 12),('Bill', 'B', 10)]
sort_tuples = sorted(student_tuples, key=lambda student: student[2])
# 输出:[('Bill', 'B', 10), ('Tom', 'C', 12), ('Jerry', 'A', 15)]
reverse实现降序排序,需要提供一个布尔值:
list1 = [2,5,8,6,1,7,4,2,3]
list2 = sorted(list1,reverse=False)
print(list2)
# 输出:[1, 2, 2, 3, 4, 5, 6, 7, 8]
list3 = sorted(list1,reverse=True)
print(list3)
# 输出:[8, 7, 6, 5, 4, 3, 2, 2, 1]
需要注意的是,在python3以后,sort方法和sorted函数中的cmp参数被取消,此时如果还需要使用自定义的比较函数,那么可以使用cmp_to_key函数。将老式的比较函数(comparison function)转化为关键字函数(key function)。与接受key function的工具一同使用(如 sorted(), min(), max(), heapq.nlargest(), itertools.groupby())。该函数主要用来将程序转成 Python 3 格式的,因为 Python 3 中不支持比较函数。
2、map()
map可以根据提供的函数对指定序列做映射,它接受一个函数 f 和一个 list ,并通过把函数 f 以此作用在 list 上的每个元素,然后返回一个新的list,map函数的入参也可以是多个.注意这个函数一定要有返回值。不然就会返回新的list 类似[None, None, None, None, None, None, None, None, None]
示例:
def fun(x):
return x*x
a = map(fun,[1,2,3,4,5])
# print a
# 输出结果:[1, 4, 9, 16, 25]
# 像在python 2 当中使用这种打印方式完全没有问题
# 但是在python 3 当中我们打印:
# print(a)
# 输出结果:<map object at 0x0000029F36872F28>
# 得到的却是这样的一个内存地址,显然这不是我们想要拿到的结果,这也和python 3 发生的一些变化有关,如果我们想要打印出一个列表的话可以这样写
# print(list(a))
# 输出结果:[1, 4, 9, 16, 25]
由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。
def format_name(s):
s1=s[0:1].upper()+s[1:].lower()
return s1 print(list(map(format_name, ['adam', 'LISA', 'barT'])))
# 输出结果:['Adam', 'Lisa', 'Bart']
适合的场景是对列表里面的一些元素需要重复的操作,用map就可以轻松搞定.
3、enumerate()
在Python当中,如果我们使用正常的迭代只能取出内部的元素本身,而取不到元素的索引,而有的时候我们不仅需要取出元素还要取出元素的索引,能够在循环打印的时候让这个计数变量倍增,而enumerate方法就可以帮我们解决这个问题
list1 = ['北京','上海','广州','深圳','武汉','郑州','西安']
# 正常迭代:
# for i in list1:
# print(i)
#输出: 北京
# 上海
# 广州
# 深圳
# 武汉
# 郑州
# 西安
# 使用普通方法:
# i=0
# for element in list1:
# list1[i] = "%d:%s"%(i,list1[i])
# i+=1
# print(list1)
# 输出:['0:北京', '1:上海', '2:广州', '3:深圳', '4:武汉', '5:郑州', '6:西安'] # 使用enumerate():
# for k,city in enumerate(list1):
# print(k,city)
# 输出:0 北京
# 1 上海
# 2 广州
# 3 深圳
# 4 武汉
# 5 郑州
# 6 西安
4、filter()
filter函数接受一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回True或者False,这样可以过滤掉一些不符合条件的元素,然后返回符合条件的list.
list_a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ]
普通方法:
def is_even(x):
return x%2==0
print(list(filter(is_even,list_a)))
# 输出:[0, 2, 4, 6, 8, 10] 使用filter和lambda 函数输出一下列表索引为奇数对应的元素; f=filter(lambda i:i%2 == 1,list_a)
print(list(f))
输出:[1, 3, 5, 7, 9]
5、reduce()
reduce函数的用法和map很类似,也是一个函数f和一个list,但是函数的入口参数一定要是两个,reduce也是对每个元素进行反复调用,最后返回最终的值,而map是返回一个list
list_a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ]
def add(x,y):
return x + y
print(reduce(add,list_a)) # 输出:55
注意在python3里面reduce已经从全局函数里面移除了,需要用的话要from functools import reduce
内置函数(sorted、map、enumerate、filter、reduce)的更多相关文章
- 函数,lambda函数,递归函数,内置函数(map,filter),装饰器
1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身份证 ...
- Python 内置函数sorted()在高级用法
对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比.在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的. ...
- 内置函数sorted()
这里顺便说一下sorted()和sort()的异同. sort 是 list 中的方法,只能对列表排序:sorted 可以对所有可迭代对象进行排序. list 的 sort 方法是对原列表进行操作,而 ...
- 内置函数 sorted
内置函数 sorted 语法: sorted(iterable,key = None,reverse= false)iterable: 可迭代的对象key:排序规则(排序函数),在sorted内部将& ...
- python内置函数sorted()及sort() 函数用法和区别
python内置函数sorted(),sort()都有排序的意思,但是两者有本质的区别,sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作,list 的 sort ...
- 内置函数二: map sorted filter
-----------生活里没有奇迹,大部分的时候奇迹是你自己创造的. # -------------------------------------------------------------- ...
- 10-9 重要的内置函数(zip、filter、map、sorted)
reverse----reversed l = [1,2,3,4,5,6] l.reverse() #不会保留原列表 print(l) l =[1,2,3,4,5,6] l2 = reversed(l ...
- 内置函数zip,map,even
内置函数的补充:1.zip:l1 = ['a','b','c','e','f','g']l2 = [1,2,3]l3=['A','B','C']L4=['牛','牛','niu']#zip,就是把俩l ...
- python 内置函数zip,map,三元,lambda表达式
#内置函数zip(),将多个可迭代对象(集合等)按照顺序进行组合成tuple元祖,放在zip 对象进行存储,: #当参数为空时候,返回空 #如果 zip() 函数压缩的两个列表长度不相等,那么 zip ...
- Python常用内置函数整理(lambda,reduce,zip,filter,map)
匿名函数lambda lambda argument1,argument2,...argumentN :expression using arguments 1.lambda是一个表达式,而不是一个语 ...
随机推荐
- #6 判断一个数是否为2的n次方
「ALBB面试题」 [题目] 如何判断一个数是否为2的n次方 [题目分析] 看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的:但是这种做法无疑大大增加了计算机的运行时间,一个非常大 ...
- 如何探测网络设备ACL规则
探测网络设备ACL规则 背景:在互联网企业的生产网络中,往往在网络入口处的网络设备上会有成千上万条ACL策略,这么多的ACL导致了网络管理员很难彻底梳理清楚其中的逻辑关系,从而不知道到底对外开放了哪些 ...
- 原子操作&普通锁&读写锁
一:原子操作CAS(compare-and-swap) 原子操作分三步:读取addr的值,和old进行比较,如果相等,则将new赋值给*addr,他能保证这三步一起执行完成,叫原子操作也就是说它不能再 ...
- .net core 使用MD5加密解密字符串
/// <summary> /// 加密 /// </summary> /// <param name="Text">要加密的文本</pa ...
- Java 设置PDF文档背景色
一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括: 设置纯色背景色 设置图 ...
- 解析高德地图api获取省市区,生成最新三级联动sql表
前言: 最近项目中用到了全国省市区三级信息,但是网上找到的信息都是比较旧的信息.与现在最新的地区信息匹配不上.后来想到高德地图上可能有这些信息.所以解析了一下api接口,生成了相关省市区的sql信息. ...
- Java面试 32个核心必考点完全解析
目录 课程预习 1.1 课程内容分为三个模块 1.2 换工作面临问题 1.3 课程特色 课时1:技术人职业发展路径 1.1 工程师发展路径 1.2 常见技术岗位划分 1.3 面试岗位选择 1.4 常见 ...
- 20190404-transition、transform转换、animation、媒体查询
目录 1.transition过渡 1.1简写:transiton:transition-property | transition-duration | transition-timing-func ...
- 盖洛普Q12在团队中的应用
周五给大家做了个盖洛普Q12的分享. 分享前做了调查问卷.除了盖洛普Q12的12个问题: 1.我知道公司对我的工作要求吗? 2.我有做好我的工作所需要的材料和设备吗? 3.在工作中,我每天都有机会 ...
- 【视频】设计模式(C++)视频讲解
设计模式(C++) 视频网址: http://www.qghkt.com/ 设计模式(C++)视频地址: https://ke.qq.com/course/318637?tuin=a508ea62 目 ...