python基础 - itertools工具

Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。

(1)itertools.count()会创建一个无限自然数序列的迭代器,根本停不下来。

itertools.count(1)  # 1,2,3,...

(2)cycle()会把传入的一个序列无限重复下去

itertools.cycle('ABC') # A,B,C,A,B,C,...

(3)chain()可以把一组迭代对象串联起来,形成一个更大的迭代器

itertools.chain('ABC', 'XYZ')  # 迭代效果:'A' 'B' 'C' 'X' 'Y' 'Z'

(4)repeat()负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数

itertools.repeat('A', 10) # 打印10次'A'

(5)groupby()把迭代器中相邻的重复元素挑出来放在一起

>>> for key, group in itertools.groupby('AAABBBCCAAA'):
...     print key, list(group) 
...
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']
>>> for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
...     print key, list(group)
...
A ['A', 'a', 'a']
B ['B', 'B', 'b']
C ['c', 'C']
A ['A', 'A', 'a']

(6)imap()map()的区别在于,imap()可以作用于无穷序列,并且,如果两个序列的长度不一致,以短的那个为准。

imap()实现了“惰性计算”,也就是在需要获得结果的时候才计算。

>>> for x in itertools.imap(lambda x, y: x * y, [10, 20, 30], itertools.count(1)):
...     print x
...
10
40
90

(7)ifilter()就是filter()的惰性实现。

(8)itertools.product(list1, list2),返回list1、list2中的元素的笛卡尔积的元组。即,依次取出list1中的每1个元素,与list2中的每1个元素,组成元组,然后,将所有的元组组成一个列表,返回。

 >>> for item in itertools.product([1,2,3],[100,200]):
...     print item
...
(1, 100)
(1, 200)
(2, 100)
(2, 200)
(3, 100)
(3, 200)

python字符串中连续相同字符个数:

import itertools
res = [(k, len(list(g))) for k, g in itertools.groupby('TTFTTTFFFFTFFTT')]
res:[('T', 2), ('F', 1), ('T', 3), ('F', 4), ('T', 1), ('F', 2), ('T', 2))]

 


参考:

https://www.liaoxuefeng.com/wiki/897692888725344/983420006222912

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