1. map()
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
def f(x):
return x*x
r = map(f, [1, 2, 3, 4, 5])
print(list(r))
[1, 4, 9, 16, 25]
【map()
函数的练习】
把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]:
def normalize(name):
return name[0].upper() + name[1:].lower()
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)
['Adam', 'Lisa', 'Bart']
2. reduce()
reduce
把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
将一个序列求和就可以用到reduce()
:
from functools import reduce
def add(x, y):
return x + y
reduce(add, [1, 2, 3, 4, 5])
15
【值得注意】:reduce()
函数需要使用语句from functools import reduce
【reduce()
函数的练习】
把字符串’123.456’转换成浮点数123.456:
from functools import reduce
def str2float(s):
numstr = s.split('.')
floatnum = reduce(lambda x, y: x * 10 + y, list(map(lambda x:int(x), numstr[0])))
floatnum += reduce(lambda x, y: x/10 + y, list(map(lambda x:int(x), numstr[1][::-1]))) / 10
return floatnum
if abs(str2float('123.456') - 123.456) < 0.00001:
print('测试成功!')
else:
print('测试失败!')
测试成功!
3. filter()
和map()
类似,filter()
也接收一个函数和一个序列。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
【1】如去掉一个list中的偶数:
def is_odd(n):
if n % 2 == 0:
return False
else:
return True
print(list(filter(is_odd, [1,2,3,4,5,6])))
[1, 3, 5]
【2】如去掉一个序列中的空字符串:
def not_empty(s):
return s and s.strip() # 如果去掉空格与原字符串之间一样,返回True,否则False
print(list(filter(not_empty, ['A', '', 'B', None, 'C', ' '])))
['A', 'B', 'C']
【filter()
函数的练习】
回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数:
def is_palindrome(n):
n_str = str(n)
return n_str == n_str[::-1]
if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]:
print('测试成功!')
else:
print('测试失败!')
测试成功!
4.sorted()
【1】对list
进行排序:
sorted([4,1,-3,-5,2])
[-5, -3, 1, 2, 4]
【2】对list
自定义排序:
sorted([4,1,-3,-5,2], key=abs)
[1, 2, -3, 4, -5]
【sorted()
函数的练习】
L = [(‘Bob’, 75), (‘Adam’, 92), (‘Bart’, 66), (‘Lisa’, 88)],分别按名字排序,再按成绩从高到低排序:
def by_score(t):
return ord(t[0][0]) # 按名字排序
#return -t[1] # 按成绩由高到低排序
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
L2 = sorted(L, key=by_score)
print(L2)
[('Adam', 92), ('Bob', 75), ('Bart', 66), ('Lisa', 88)]