itertools方法
chain(*iterables) 此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从iter1开始生成项,知道iter1被用完,然后从iter2生成项,这一过程会持续到iterN中所有的项都被用完。
from itertools import chain
test = chain('AB', 'CDE', 'F')
for el in test:
print el
-------------result---------------------
A
B
C
D
E
F
combinations(iterable, r) 创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序:
test = itertools.combinations([1,2,3,4], 2)
for i in test:
print(i)
-------------------------------------------
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
combinations_with_replacement(iterable, r) 返回迭代器中元素的连续r长度组合允许单个元素有连续的重复。
test = itertools.combinations_with_replacement([1,2,3], 2)
for i in test:
print(i)
------------------------------------------------------
(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3)
islice() 函数返回一个迭代器,按照索引从输入迭代器返回所选择的元素
for i in islice(range(10), 5):
print(i)
for i in islice(range(100), 0, 100, 20):
print(i)
-----------------result-------------------------
0
1
2
3
4
---
0
20
40
60
80
tee() 返回一个迭代器可以用来为并行处理的多个算法提供相同的数据集,tee返回一个新的迭代器后不应该使用之前的迭代器,因为当原迭代器被消耗之后新的迭代器则不会生成被使用的值
r = islice(count(), 5)
r1, r2 = tee(r)
print(list(r1))
print(list(r2))
-------------------
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
count(start=0, step=1) 不停的生成新值
cycle() 返回一个迭代器,会无限地重复给定参数的内容
for i in zip(range(5), cycle(['a','b','c'])):
print(i)
-----------------------------------------
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'a')
(4, 'b')
repeat() 函数返回一个迭代器,每次访问时会生成相同的值
for i in repeat('handsome',5):
print(i)
--------------------------------
handsome
handsome
handsome
handsome
handsome
for i in map(lambda x,y: (x,y,x*y), repeat(2), range(10)):
print(f'{i[0]}*{i[1]}={i[2]}')
--------------------------------------------
2*0=0
2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
dropwhile(function, iterable) 返回一个不满条件的迭代器(第一次条件为false之后输入的其余都会全部返回)
test = dropwhile(lambda x:x<2, [-1,0,1,3,2,0,1])
print(list(test))
---------------------------------------------
[3, 2, 0, 1]
takewhile(functin, iterable) 返回一个满足条件的迭代器(第一次条件为false则停止输入)
test = takewhile(lambda x:x>=2, [2,3,4,-1,5])
print(list(test))
------------------------------------------------------
[2, 3, 4]
filterfalse() 返回一个迭代器,其中只包含测试条件不成立的对应元素
test = filterfalse(lambda x:x%2, [1,2,3,4])
print(list(test))
-----------------------------------------
[2,4]
compress(data, selectors) 返回true值的数据
test = compress(range(10), cycle([False,True,False]))
print(list(test))
-----------------------------------------------------
[1, 4, 7]
groupby() 返回一个迭代器,会生成一个公共键组织的集值(前提是排序后)
a = cycle(islice(count(), 3))
b = islice(count(), 7)
c = list(zip(a, b))
for k,g in groupby(c, lambda c:c[0]):
print(k, list(g))
c.sort()
for k,g in groupby(c, lambda c:c[0]):
print(k, list(g))
----------------------------------------
0 [(0, 0)]
1 [(1, 1)]
2 [(2, 2)]
0 [(0, 3)]
1 [(1, 4)]
2 [(2, 5)]
0 [(0, 6)]
0 [(0, 0), (0, 3), (0, 6)]
1 [(1, 1), (1, 4)]
2 [(2, 2), (2, 5)]
accumulate() 处理输入迭代器,将第n个和第n+1个元素相加并返回,适合用来生成一个数值输入序列的累加和
print(list(accumulate(range(1,6,2))))
print(list(accumulate('abc')))
print(list(accumulate('abc', lambda a,b: a+b+a)))
------------------------------
[1, 4, 9]
['a', 'ab', 'abc']
['a', 'aba', 'abacaba']
product() 生成的值是元组, 第一个元组包含各个迭代器的第一个值,传入product的最后一个迭代器优先处理
a= [1,2,3,4]
b= ['a','b']
test = product(a,b)
print(list(test))
test = product(range(3), repeat=2)
print(list(test))
----------------------------
[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b'), (4, 'a'), (4, 'b')]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
permutations() 排列给定的序列
def show(iterable):
first = None
for i, item in enumerate(iterable, 1):
if first != item[0]:
if first is not None:
print()
first = item[0]
print(''.join(item), end=' ')
print()
show(permutations('abcd'))
show(permutations('abcd', r=2))
------------------------------------------
abcd abdc acbd acdb adbc adcb
bacd badc bcad bcda bdac bdca
cabd cadb cbad cbda cdab cdba
dabc dacb dbac dbca dcab dcba
ab ac ad
ba bc bd
ca cb cd
da db dc
combinations() 组合给定的序列,输入的成员唯一,返回的结果就不会重复
def show(iterable):
first = None
for i, item in enumerate(iterable, 1):
if first != item[0]:
if first is not None:
print()
first = item[0]
print(''.join(item), end=' ')
print()
show(combinations('abcd', r=2))
--------------------------------------------
ab ac ad
bc bd
cd
combinations_with_replacement() 组合给定的序列,允许单个元素重复
def show(iterable):
first = None
for i, item in enumerate(iterable, 1):
if first != item[0]:
if first is not None:
print()
first = item[0]
print(''.join(item), end=' ')
print()
show(combinations_with_replacement('abcd', r=2))
---------------------------------------------------------
aa ab ac ad
bb bc bd
cc cd
dd