map
map()接受2个参数,一个函数 , 一个Iterable,返回Iterator
def f(x):
return x*x
r = map(f, [1, 2, 3, 4 ,5])
print(list(r)) # 强转 由于Iterator是惰性序列
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 转字符串
多参数映射:当多个列表元素个数不同时,以最小个数的为基准
list1 = [1, 2, 3, 4]
list2 = [1, 2, 3, 4]
list3 = [1, 2, 3, 4]
list4 = [1, 2, 3, 4]
def addList(x, y, z, k):
return x + y + z + k
print(list(map(addList, list1,list2,list3,list4)))
reduce
把一个函数作用在一个序列[x1, x2, x3, …]上
reduce(func, iter [,initail]) initail设置为初始值
这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
# 把序列变成整数13579
from functools import reduce
def fn(x,y):
return x*10 + y
print(reduce(fn, [1, 3, 5, 7, 9]))
filter
用于过滤序列 然后根据返回值是True还是False决定保留还是丢弃该元素
def is_odd(n): # 删除偶数
return n%2 ==1
print(list(filter(is_odd, [1, 2, 4, 5, 7, 10, 15])))
# 返回都是是迭代器
# 把序列中的空字符串去掉
def not_empty(s):
return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B ', None, 'C', ' '])))
# 求素数
#计算素数的一个方法是埃氏筛法
def _odd_iter(): # 构成一个从3开始的奇数序列
n =1 # 注意这是一个生成器,并且是一个无限序列
while True:
n = n + 2
yield n
def _not_divisible(n): # 筛选函数
return lambda x:x%n > 0 #获得对n取余不为0的序列(比如删除所有是2倍数的数字)
def primes(): # 定义一个生成器,不断返回下一个素数
yield 2
it = _odd_iter() # 初始化序列
while True:
n = next(it)
yield n
it = filter(_not_divisible(n), it)
for n in primes():
if n < 1000:
print(n)
else:
break
sorted
返回一个列表,如果对字典sorted,返回一个列表,列表中的元组存放键值对
print(sorted([-36, 5, -12, 9]))
print(sorted([-36, 5, -12, 9], key=abs)) # 按绝对值排序
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)) # reverse=True
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
print(sorted(L, key=lambda t:t[1])) # 按成绩排
# 字典按键排序
sorted(dict1.items(), key = lambda x:x[0])
# 字典按值排序
sorted(dict1.items(), key = lambda x:x[1])
# a = [{'年龄':12, '姓名':'7刘'},{'年龄':11, '姓名':'7刘'},{'年龄':18, '姓名':'6刘'},{'年龄':7, '姓名':'刘'}]
# 字典没有.sort方法 而列表可以用
a.sort(key=lambda x:x['年龄'])