复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75# -*- encoding: utf-8 -*- import sys ''' 第7条: 用列表推导来取代map和filter 关键: 1 列表推导 含义: 根据一个列表制作另一个列表的表达式 2 用列表推导取代map和filter map(function, arr): 对arr这个序列中每个元素应用function方法,返回处理后的新序列 filter(function, arr): 对arr这个序列中每个元素引用function方法, 凡是function(元素)结果返回为假的元素都会被过滤,返回处理后的新序列 列表推导: 实际就是对原始列表中每个元素进行处理和判定,生成新的序列。 3 总结 3.1) 列表推导 相比较于 map和filter能够更加清晰地处理问题,无需编写lambda表达式, 因此推荐用列表推导 3.2) 列表推导可以跳过某些元素,如果用map就必须借助filter 3.3) 字典和集合也支持推导表达式 参考: Effectiv Python 编写高质量Python代码的59个有效方法 ''' def listComprehension(arr): result = [value**2 for value in arr] return result def listComprehensionWithEven(arr): result = [value**2 for value in arr if value % 2 == 0] return result def useMap(arr): result = map(lambda x: x**2, arr) return result def useMapWithEven(arr): result = map(lambda x: x**2, filter(lambda x: x % 2 == 0, arr)) return result def dictComprehension(myDict): valueToKey = {value: key for key, value in myDict.iteritems()} return valueToKey def setComprehension(myDict): result = {len(value) for key, value in myDict.iteritems()} return result def process(): arr = [i for i in range(10)] result = listComprehension(arr) print result result = useMap(arr) print result result = listComprehensionWithEven(arr) print result result = useMapWithEven(arr) print result myDict = {"1": "yangxing", "2": "lijie", "3": "gaoxiang"} result = dictComprehension(myDict) print result result = setComprehension(myDict) print result if __name__ == "__main__": process()
最后
以上就是潇洒摩托最近收集整理的关于Effective Python 读书笔记: 7 用列表推导来取代map和filter的全部内容,更多相关Effective内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复