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']



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章