python学习:函数---内置函数(filter、map、sort)
一、filter
filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素。
需要注意,在python3中返回的是一个可迭代对象,但是在python2中返回的是一个新的列表 。
# 过滤出列表中的所有奇数 def is_odd(x): return x % 2 == 1 ret = filter(is_odd,[1, 4, 6, 7, 9, 12, 17]) print(list(ret)) # [1, 7, 9, 17] # 过滤出1-100中平方根是整数的数 from math import sqrt def sqr(x): return sqrt(x) % 1 == 0 ret = filter(sqr,range(1,101)) print(list(ret))
二、map
# 计算平方数 def square(x): return x ** 2 ret = map(square, [1, 2, 3, 4, 5]) # 计算列表各个元素的平方 print(list(ret)) # [1, 4, 9, 16, 25] ret = map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 print(list(ret)) # [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加 ret = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8]) print(list(ret)) #[3, 7, 11, 15, 19]
三、sorted
语法: sorted(iterable, key=None, reverse=False) 参数说明: iterable -- 可迭代对象。 key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 返回值: 返回重新排序的列表。
l = [30,6,-10,88,-20,22] # 默认排序 ret = sorted(l) print(l) # 原始列表 [30, 6, -10, 88, -20, 22] print(ret) # 排序后的新列表 [-20, -10, 6, 22, 30, 88] # 指定key排序 ret = sorted(l,key=abs) # 根据绝对值大小排序 print(l) # 原始列表 [30, 6, -10, 88, -20, 22] print(ret) # 排序后的新列表 [6, -10, -20, 22, 30, 88] # 指定排序规则 ret = sorted(l,key=abs,reverse= True) print(l) # 原始列表 [30, 6, -10, 88, -20, 22] print(ret) # 排序后的新列表 [88, 30, 22, -20, -10, 6] # 字典也可以排序,只不过字典排序只排key dic ={3: 'D', 2: 'B', 5: 'B', 4: 'E', 1: 'A'} ret = sorted(dic) print(ret) # [1, 2, 3, 4, 5] ret1 = sorted(l, key=lambda x: x*-1) ret2 = sorted(l,reverse= True) print(ret1) # [88, 30, 22, 6, -10, -20] print(ret2) # [88, 30, 22, 6, -10, -20]
之前学过一个sort方法,这个sort方法不是一个内置函数,它只是列表的一个方法,只有在使用列表的时候才可以使用,但是sorted内置函数对所有可迭代对象都可以使用。
列表的sort方法是在原列表上排序,不会创建一个新列表。sorted内置函数是创建了一个新的列表来存储返回结果。
l = [30,6,-10,88,-20,22] # 默认排序 ret = sorted(l) print(l) # 原始列表 [30, 6, -10, 88, -20, 22] print(ret) # 排序后的新列表 [-20, -10, 6, 22, 30, 88] ret = l.sort() print(l) # [-20, -10, 6, 22, 30, 88] print(ret) # None l.sort(key=abs) print(l) # [6, -10, -20, 22, 30, 88] l.sort(reverse=True) print(l) # [88, 30, 22, 6, -10, -20] l.sort(key=abs,reverse=True) print(l) # [88, 30, 22, -20, -10, 6]
四、reversed
# 字符串 seqString = 'Runoob' print(list(reversed(seqString))) # ['b', 'o', 'o', 'n', 'u', 'R'] # 元组 seqTuple = ('R', 'u', 'n', 'o', 'o', 'b') # ['b', 'o', 'o', 'n', 'u', 'R'] print(list(reversed(seqTuple))) # range seqRange = range(5, 9) # [8, 7, 6, 5] print(list(reversed(seqRange))) # 列表 seqList = [1, 2, 4, 3, 5] print(list(reversed(seqList))) # [5, 3, 4, 2, 1]
五、