Python内置函数和高阶函数(map,filter,reduce, sorted,enumerate, zip,单行条件语句 )
1. map 的用法:
map()函数接收两个参数,一个是函数,一个是序列。
map将传入的函数依次作用到序列的每个元素,并把结果作为新的对象返回,返回值是一个可迭代对象,可以用list()方法将其转为一个列表。
def f(x):
return x*x
print(list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
输出:[1, 4, 9, 16, 25, 36, 49, 64, 81]
2.filter的用法
Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。
和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。True保留,False丢弃
def f(x):
return x%2 == 1
print(list(filter(f, [1, 2, 3, 4, 5, 6, 7])))
输出:[1, 3, 5, 7]
3. reduce的用法
reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
reduce函数不是内置函数,而是在模块functools中的函数,故需要导入。但用处很多
from functools import reduce
def add(x, y):
return x + y
print(reduce(add, [1, 3, 5, 7, 9]))
输出:25
# 将[1, 3, 4, 6, 7, 1, 0]生成1346710
def fn(x, y):
return x * 10 + y
print(reduce(fn, [1, 3, 4, 6, 7, 1, 0]))
输出: 1346710
# 字符串转数字
def fn(x, y):
return x * 10 + y
def f(x):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[x]
# reduce和map一起用
print(reduce(fn, map(f, '135874')))
输出:135874
4. sorted 的用法
sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
语法: sorted(iterable, cmp=None, key=None, reverse=False)
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
print(sorted([9, 23, 5, 34, 10], reverse=False))
输出: [5, 9, 10, 23, 34]
5. enumerate的用法
如果你需要遍历可迭代的对象,又需要获取它的下标,可以用enumerate
a = ['a', 'b', 'c', 'd']
for idx, value in enumerate(a):
print(idx, value)
输出:
0 a
1 b
2 c
3 d
6. zip的用法
zip接收多个迭代器参数,取相同下标的元素组合成一个新的迭代器;
zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
b = ['a', 'b', 'c', 'd']
c = ['e', 'f','g']
d = ['h', 'i', 'j', 'k']
for i in zip(b, c, d):
print(i)
输出:
('a', 'e', 'h')
('b', 'f', 'i')
('c', 'g', 'j')
print(list(zip(b, c, d)))
输出:
[('a', 'e', 'h'), ('b', 'f', 'i'), ('c', 'g', 'j')]
7. 单行条件语句
如果我们使用条件语句,那么最可能写成下面这个样子:
x = int(input())
if x >= 10:
print("Horse")
elif 1 < x < 10:
print("Duck")
else:
print("Baguette")
但其实我们也可以把所有条件都写在 print 函数内,即上面 7 行代码可以等价写成如下一行:
print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")