Pythonのitertoolsモジュール

4677 ワード

itertoolsモジュールの主な機能は反復器の作成です.
>>> itertools.
itertools.__class__(         itertools.chain(
itertools.__delattr__(       itertools.combinations(
itertools.__dict__           itertools.count(
itertools.__doc__            itertools.cycle(
itertools.__file__           itertools.dropwhile(
itertools.__format__(        itertools.groupby(
itertools.__getattribute__(  itertools.ifilter(
itertools.__hash__(          itertools.ifilterfalse(
itertools.__init__(          itertools.imap(
itertools.__name__           itertools.islice(
itertools.__new__(           itertools.izip(
itertools.__package__        itertools.izip_longest(
itertools.__reduce__(        itertools.permutations(
itertools.__reduce_ex__(     itertools.product(
itertools.__repr__(          itertools.repeat(
itertools.__setattr__(       itertools.starmap(
itertools.__sizeof__(        itertools.takewhile(
itertools.__str__(           itertools.tee(
itertools.__subclasshook__(

1.複数の反復器をリンクします.
itertools.chain(iter 1,iter 2,...,itern):与えられた反復器のすべての内容を含む新しい反復器を作成するための反復器のセットを与えます.
>>> name
['zhu', 'jiang', 'tao']
>>> a
[2, 4, 6]
>>> for x in itertools.chain(name,a):
...     print x,
...
zhu jiang tao 2 4 6

2.二重反復
itertools.chain.from_iterable(iter):コードに相当する反復器iterの要素を反復します.
for  it in iter:
   for x in it:
   yield x
>>> for x in itertools.chain.from_iterable(name):
...     print x,
...
z h u j i a n g t a o

3.反復器を作成し、iterable内のすべての長さrのサブシーケンスを返します.
>>> for x in itertools.combinations(name,2):
...     print x
...
('zhu', 'jiang')
('zhu', 'tao')
('jiang', 'tao')
>>> for x in itertools.combinations(a,2):
...     print x,
...
(2, 4) (2, 6) (4, 6)

4.反復器を作成してnから始まる連続整数を生成する
itertools.count(x)
>>> for x in itertools.count():
...     if x < 5:
...         print x
...     else:
...         break
...
0
1
2
3
4
>>> for x in itertools.count(3):
...     if x <= 10:
...         print x,
...     else:
...         break
...
3 4 5 6 7 8 9 10
#itertools.count(x) :       ,x    。   0

5.itertools.cycle(iterable):反復器を作成し、iterable要素に対してループ操作を繰り返します.
[root@zhu ~]# python zhu.py
['cai', 'sang', 'zi', 'cai', 'sang', 'zi', 'cai', 'sang', 'zi', 'cai', 'sang']
[root@zhu ~]# cat zhu.py
#!/usr/bin/python
import itertools
a = []
name  = 'cai sang zi'
name = name.split()
for x in itertools.cycle(name):
    if len(a) <= 10:
        a.append(x)
    else:
        print a
        break

6.dropwhile(predicate,iterable):関数predicate(item)が真である限り、iterableのアイテムを破棄し、predicate(item)が偽である場合、iterableのアイテムと後続のすべてのアイテムを生成する反復器を作成します.
[root@zhu ~]# python zhu.py
zi yue shang liu shao tou
[root@zhu ~]# cat zhu.py
#!/usr/bin/python
import itertools
name = 'cai sang zi yue shang liu shao tou'.split()
def zhu(s):
    if s == 'zi':
        return False
    else:
        return 2
for x in itertools.dropwhile(zhu,name):
    print x,
#              ,    。

7.itertools.groupby(iterable):反復器を作成し、iterableに連続するアイテムをグループ化します.iterableが連続反復で統一されたアイテムを生成すると、同じアイテムが定義されます.
>>> [list(g) for k, g in itertools.groupby('AAAABBBCCD')]
[['A', 'A', 'A', 'A'], ['B', 'B', 'B'], ['C', 'C'], ['D']]
>>> [k  for k, g in itertools.groupby('AAAABBBCCD')]
['A', 'B', 'C', 'D']
>>> [k  for k, g in itertools.groupby('AABAABDBBCCD')]
['A', 'B', 'A', 'B', 'D', 'B', 'C', 'D']
>>> [list(g) for k, g in itertools.groupby('AABAABDBBCCD')]
[['A', 'A'], ['B'], ['A', 'A'], ['B'], ['D'], ['B', 'B'], ['C', 'C'], ['D']]

8.imap(func,*iterables)-->imap object:反復器を作成し、生成器func(i 1,i 2,i 3,...,in)i 1,i 2,i 3,...,inはそれぞれ反復器iter 1,iter 2,iter 3,iternから来ており,funcがnoneであれば,(i 1,i 2,i 3,...,in)形式のメタグループを返し,1つの反復器が値を生成しない限り反復は停止する.
[root@zhu ~]# cat zhu.py
#!/usr/bin/python
import itertools
a = [2,4,6,8]
b = [3,5,7,9]
def cheng(x,y):
    return x*y
for x in itertools.imap(cheng,a,b):
    print x
[root@zhu ~]# python zhu.py
6
20
42
72

本文は“浪淘沙”のブログから出て、転載をお断りします!