python的itertools模块常用方法

itertools模块

很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic的代码在执行上也更有效率。今天就给大家介绍一下Python的系统库itertools。

迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(list)来说,迭代器最大的优势就是延迟计算,按需使用,从而提高开发体验和运行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。

话虽这么说但大家平时用到的迭代器大概只有range了,而通过iter函数把列表对象转化为迭代器对象又有点多此一举,这时候我们今天的主角itertools就该上场了。

accumulate函数

简单来说就是累加。

>>> import itertools
>>> x = itertools.accumulate(range(10))
>>> print(list(x))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

可以用来求前缀和

print(list(itertools.accumulate([1,2,3,4])))
# [1, 3, 6, 10]

chain函数

连接多个列表或者迭代器。

>>> x = itertools.chain(range(3), range(4), [3,2,1])
>>> print(list(x))
[0, 1, 2, 0, 1, 2, 3, 3, 2, 1]

permutations函数

全排列

ps = list(itertools.permutations([1,2,3],2))
print(len(ps)) # 3个中选2个排序 = 3*2 = 6
print(ps)

# 输出
6
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

combinations函数

求列表或生成器中指定数目的元素不重复的所有组合

>>> x = itertools.combinations(range(4), 3)
>>> print(list(x))
[(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)]

combinations_with_replacement

允许重复元素的组合

print(list(itertools.combinations_with_replacement([1,2,3],2)))
[(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

你可能感兴趣的:(python,python)