Filter
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
如果使用lambda表达式:
x=range(1,10)
newlist = filter(lambda x:x%2==1,x)
Map
listx = [1,2,3,4,5,6,7] # 7 个元素
listy = [2,3,4,5,6,7] # 6 个元素
listz = [100,100,100,100] # 4 个元素
list_result = map(lambda x,y,z : x**2 + y + z,listx, listy, listz)
print(list(list_result))
##[103, 107, 113, 121]
由于 lambda 中的 z 参数实际是使用了 listz, 而 listz 里面只有 4 个元素, 所以即使 listx 有 7 个元素, listy 有 6 个元素,也不会继续执行了,只执行了 4 个元素的的计算。
Sorted
def reversed_cmp(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
sorted([36, 5, 12, 9, 21], reversed_cmp)
##[36, 21, 12, 9, 5]
Reduce
def add(x, y) : # 两数相加
return x + y
reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
Zip
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组的列表
##[(1, 4), (2, 5), (3, 6)]
zip(a,c) # 元素个数与最短的列表一致
##[(1, 4), (2, 5), (3, 6)]
zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式
##[(1, 2, 3), (4, 5, 6)]