Pythonic¶
约 298 个字 预计阅读时间 1 分钟
原来我可以少些这么多For-Loop¶
List Comprehension: lst = [i for i in range(100)]
Generator: (i for i in range(100))
,含有yield()
方法
使用built-in函数会更方便,同时,可读性更强
any(i > 10 for i in range(100))
: Syntax Sugar for any((i > 100 for i in range(100)))
all()
同理
注意:如果写 any([i > 10 for i in range(100)])
会慢不少,因为List Comprehension会把所有的列表元素全部拿出来,而写成Generator的格式会更快,因为Generator是一个一个生成的(惰性的),只要找到一个不满足的立刻返回False。
如果要写一个满足good()
函数的List Comprehension,除了[i for i in slt if good(i)]
还可以用内置函数filter(good,lst)
,不过这个会返回Generator而不是一个List。所以说要在外面套一个list()
map(Function,List)
:按照Function的对应法则映射List中的所有元素。返回一个Generator。还有一个好处:如果Function需要多个参数时,map可以接受多个参数,长度取第一个List的长度。
zip(Lst1,Lst2)
:将Index相同的两个Lisat中的元素打包,新的生成器中的每个元素都是一个Tuple。