python基础:itertools模块常用函数

常用函数及说明

compress(dataselectors) #compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
chain(*iterables) # chain('ABC', 'DEF') --> A B C D E F
filterfalse(predicateiterable) # filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
accumulate(iterable[func]) #accumulate([1,2,3,4,5]) --> 1 3 6 10 15
permutations(iterabler=None) # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
# permutations(range(3)) --> 012 021 102 120 201 210
combinations(iterabler) # combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123
product(*iterablesrepeat=1) # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
groupby(iterablekey=None) 为每个唯一键生成一个(key,sub-iterator)

标准库itertools模块中有一组用于许多常见数据算法的生成器。例如,groupby可以接受任何序列和一个函数。它根据函数的返回值对序列中的连续元素进行分组。下面是一个例子

import itertools

first_letter = lambda x: x[0]
names=["Alan","Adam","Wes",'Will',"Albert","Steven"]
for letter,names in itertools.groupby(names,first_letter):
    print(letter,list(names))#names is generator

输出:

A ['Alan', 'Adam']
W ['Wes', 'Will']
A ['Albert']
S ['Steven']

accumulate举例

>>> from itertools import accumulate
>>> import operator
>>> data =[2,4,5,0,2,3]
>>> list(accumulate(data,operator.mul))
[2, 8, 40, 0, 0, 0]
>>> list(accumulate(data,max))
[2, 4, 5, 5, 5, 5]
>>> list(accumulate([1,2,3,4,5,6],lambda x,y:x*y if x>4 else x+y))
[1, 3, 6, 24, 120, 720]

filterfalse举例

import itertools

first_letter = lambda x: x[0]=='A'
names=["Alan","Adam","Wes",'Will',"Albert","Steven"]
print(list(itertools.filterfalse(first_letter,names)))

输出:

['Wes', 'Will', 'Steven']



你可能感兴趣的:(Python基础)