语法糖
能简写的情况下,尽量避免普通for循环,例如:
result=[]
for s in source:
if s>0:
result.append(s)
return result
可以写成以下两种形式,运行速度和可读性都更好:
return [s for s in source if s>0] #列表推导式
return filter(lambda s: s>0,source) #集合函数
常用函数
所有常用迭代器函数在python内建函数指南和python官网itertools指南中都能找到
all、any
all对空序列返回True,any对空序列返回False
all(iterable);any(iterable)
filter、map、reduce
filter(function, sequence)
#====可以传入多个序列,那么function要带多个参数====
map(function, sequence[, sequence, ...])
from functools import reduce
reduce(function, sequence[, initial])
compress
第一个参数填需要筛选的数据,第二个参数填由True和False构成的序列,返回对应位置为True的数据组成的新序列
compress(sequence,chosen)
zip
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
sorted
返回list,不像其他都返回迭代器
sorted(iterable, key=None, reverse=False)
groupby
groupby把迭代器中相邻的,指定特征重复的元素挑出来放在一起。欲使所有相同key的元素在一组中,要在list传入groupby()之前进行排序
groupby(sequence,key = function)
例:
from itertools import groupby
def height_class(h):
if h>180:
return 'tall'
elif h<160:
return 'short'
else:
return 'middle'
friends = [191, 158, 159, 165, 170, 177, 181, 182, 190]
for m,n in groupby(friends,key = height_class):
print(m,list(n))
返回:
tall [191]
short [158, 159]
middle [165, 170, 177]
tall [181, 182, 190]
集合比较大小
元组可以和元组比较大小,列表可以和列表比较大小。原理是先比较靠前的元素,相同则比较下一组元素
(1, 5) < (2, 3) # True
(2, 8) < (2, 6) # False
(1, 2) < (1, 2) # False
(1, 1, -1) < (1, 2) # True
(1, 2, -1) < (1, 2) # False,不等长,大元组更大
判断元素是否可迭代
from collections import Iterable
isinstance('abc',Iterable) #True
isinstance([1,2,3,4],Iterable) #True
isinstance(1234,Iterable) #False
isinstance((1,),Iterable) #True
isinstance(enumerate([1,2,3,4]),Iterable) #True