Pythonのitertoolsモジュール
4677 ワード
itertoolsモジュールの主な機能は反復器の作成です.
1.複数の反復器をリンクします.
itertools.chain(iter 1,iter 2,...,itern):与えられた反復器のすべての内容を含む新しい反復器を作成するための反復器のセットを与えます.
2.二重反復
itertools.chain.from_iterable(iter):コードに相当する反復器iterの要素を反復します.
for it in iter:
for x in it:
yield x
3.反復器を作成し、iterable内のすべての長さrのサブシーケンスを返します.
4.反復器を作成してnから始まる連続整数を生成する
itertools.count(x)
5.itertools.cycle(iterable):反復器を作成し、iterable要素に対してループ操作を繰り返します.
6.dropwhile(predicate,iterable):関数predicate(item)が真である限り、iterableのアイテムを破棄し、predicate(item)が偽である場合、iterableのアイテムと後続のすべてのアイテムを生成する反復器を作成します.
7.itertools.groupby(iterable):反復器を作成し、iterableに連続するアイテムをグループ化します.iterableが連続反復で統一されたアイテムを生成すると、同じアイテムが定義されます.
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つの反復器が値を生成しない限り反復は停止する.
本文は“浪淘沙”のブログから出て、転載をお断りします!
>>> 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
本文は“浪淘沙”のブログから出て、転載をお断りします!