itertools模块是Python标准库中非常强大的一个模块,提供了一些用于高效遍历、组合和排列迭代器元素的工具函数。下面是itertools模块的一些常用用法及示例:
itertools.count()
这个函数返回一个无限迭代器,它会不断生成连续的整数。
import itertools
for i in itertools.count(start=1, step=2):
print(i)
if i == 9:
break
输出:
1
3
5
7
9
itertools.cycle()
这个函数返回一个无限迭代器,它会不断重复给定的序列。
import itertools
colors = ['red', 'green', 'blue']
for color in itertools.cycle(colors):
print(color)
if color == 'blue':
break
输出:
red
green
blue
itertools.repeat()
这个函数返回一个无限迭代器,它会不断重复给定的对象。
import itertools
for i in itertools.repeat('hello', times=3):
print(i)
输出:
hello
hello
hello
itertools.chain()
这个函数将多个迭代器连接在一起,返回一个新的迭代器。
import itertools
a = [1, 2, 3]
b = ['a', 'b', 'c']
for x in itertools.chain(a, b):
print(x)
输出:
1
2
3
a
b
c
itertools.islice()
这个函数返回一个迭代器的部分切片。
import itertools
a = [1, 2, 3, 4, 5]
for x in itertools.islice(a, 2, None):
print(x)
输出:
3
4
5
itertools.compress()
这个函数接受一个可迭代对象和一个相同长度的布尔值序列,返回一个由可迭代对象中对应布尔值为True的元素构成的迭代器。
import itertools
data = ['a', 'b', 'c', 'd', 'e']
selectors = [True, False, True, False, True]
for x in itertools.compress(data, selectors):
print(x)
输出:
a
c
e
itertools.permutations()
这个函数返回指定长度的排列组合。
import itertools
for p in itertools.permutations('abc', 2):
print(p)
输出:
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')
itertools.combinations()
这个函数返回指定长度的组合,不考虑元素的顺序。
import itertools
for c in itertools.combinations('abc', 2):
print(c)
输出:
('a', 'b')
('a', 'c')
('b', 'c')
itertools.product()
这个函数返回多个迭代器的笛卡尔积。
import itertools
a = [1, 2]
b = ['a', 'b']
for p in itertools.product(a, b):
print(p)
输出:
(1, 'a')
(1, 'b')
(2, 'a')
(2, 'b')
itertools.groupby()
这个函数返回一个迭代器,它根据给定的键函数对元素进行分组。
import itertools
data = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 30},
{'name': 'Charlie', 'age': 25},
{'name': 'David', 'age': 30},
]
for key, group in itertools.groupby(data, key=lambda x: x['age']):
print(key)
for item in group:
print(' ', item['name'])
输出:
25
Alice
Charlie
30
Bob
David