语法糖

能简写的情况下,尽量避免普通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