天天看点

【学习】python每天进步一点点-itertools

每次写python都是各种查资料,之前搜过的东西脑子里大致有个印象,但是又写不出来qaq,所以记录一下每天学会的函数什么的…(具体描述和例子非原创)

itertools

combinations()

combinations(iterable,r);

创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序

for i in combinations([1, 2, 3], 2):
    print i
--------------------------------
(1, 2)
(1, 3)
(2, 3)
           

combinations_with_replacement()

for i in combinations_with_replacement([1, 2, 3], 2):
    print i
-----------------------------------------------------
(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3)
           

chain()

使用形式:

chain(iterable1, iterable2, iterable3, ...)

chain 接收多个可迭代对象作为参数,将它们『连接』起来,作为一个新的迭代器返回。

>>> from itertools import chain
>>>
>>> for item in chain([1, 2, 3], ['a', 'b', 'c']):
...     print item
...
1
2
3
a
b
c
           

还可以这样

letters = ['a', 'b', 'c', 'd', 'e', 'f']
    booleans = [1, 0, 1, 0, 0, 1]
     
    print(list(itertools.chain(letters,booleans)))
#     ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1]
 
    print(tuple(itertools.chain(letters,letters[3:])))
#     ('a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f')
 
    print(set(itertools.chain(letters,letters[3:])))
#     {'a', 'd', 'b', 'e', 'c', 'f'}
        
    print(list(itertools.chain(letters,letters[3:])))
#     ['a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f']
           

chain.from_iterable()

接收一个可迭代对象作为参数,返回一个迭代器

>>> string = chain.from_iterable('ABCD')
>>> string.next()
'A'
           

之前使用过

list(chain.from_iterable(list of a list))

把 list of a list 铺平,变成一个 list

参考:

  1. python itertools功能详解
  2. 高效的 itertools 模块

继续阅读