Python之itertools模块

python的itertools模块介绍

itertools模块是Python标准库中的一个模块,提供了多个用于迭代器和循环操作的函数。

1.count方法:生成一个从指定起始数开始的整数序列(无穷迭代)

函数功能:

count函数生成一个无穷迭代器,用于生成一个整数序列。

语法:

itertools.count(start=0, step=1)

参数介绍:

  • start:可选参数,默认为0,指定生成序列的起始数。
  • step:可选参数,默认为1,指定每次增加的步长。

代码示例:

import itertools

# 生成从1开始,以2为步长的整数序列
count = itertools.count(start=1, step=2)

# 获取前5个元素
for i in range(5):
    print(next(count))
   
输出:
1
3
5
7
9

2.cycle方法:生成一个无限迭代器,循环重复迭代给定的可迭代对象

函数功能:

cycle函数生成一个无限迭代器,循环重复迭代给定的可迭代对象。

语法:

itertools.cycle(iterable)

参数介绍:

  • iterable:需要循环迭代的可迭代对象

返回值:

cycle方法返回一个无穷迭代器对象,每次迭代会生成给定可迭代对象的元素,无限循环重复迭代。

代码示例:

import itertools

# 创建一个列表
numbers = [1, 2, 3]
# 使用cycle方法生成一个无限迭代器
cycle_iter = itertools.cycle(numbers)

# 获取前10个元素
for i in range(10):
    print(next(cycle_iter))
输出:
1
2
3
1
2
3
1
2
3
1

3.repeat方法:生成一个无穷迭代器,重复生成给定对象。

函数功能:

repeat函数生成一个无穷迭代器,重复生成给定对象。

语法:

itertools.repeat(object, times=None)

参数介绍:

  • object:需要重复生成的对象
  • times:可选参数,指定重复生成的次数。默认为None,表示无限重复

返回值:
repeat方法返回一个无穷迭代器对象,每次迭代会生成给定对象。

代码示例:

import itertools

# 使用repeat方法生成一个无限迭代器
repeat_iter = itertools.repeat('Hello', times=3)

# 获取所有元素
for item in repeat_iter:
    print(item)
输出:    
Hello
Hello
Hello

4.chain方法:将多个可迭代对象连接在一起,返回一个迭代器,依次迭代每个可迭代对象的元素

函数功能:

chain函数将多个可迭代对象连接在一起,返回一个迭代器,依次迭代每个可迭代对象的元素。

语法:

itertools.chain(*iterables)

参数介绍:

  • iterables:多个可迭代对象。

返回值:
chain方法返回一个迭代器,依次迭代每个可迭代对象的元素。

代码示例:

import itertools

# 创建两个列表
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]

# 使用chain方法将两个列表连接在一起
chain_iter = itertools.chain(list1, list2)
 
# 获取所有元素
for item in chain_iter:
    print(item)
输出:
a
b
c
1
2
3

5.islice方法:用于在可迭代对象中获取指定范围的元素,返回一个迭代器

函数功能:

islice函数用于在可迭代对象中获取指定范围的元素。

语法:

itertools.islice(iterable, stop)

参数介绍:

  • iterable:要进行切片的可迭代对象。
  • stop:切片的终止位置,即获取元素的个数。

返回值:

islice方法返回一个迭代器对象,其中包含可迭代对象中指定范围的元素。

代码示例:

import itertools

# 创建一个列表
letters = ['a', 'b', 'c', 'd', 'e']

# 使用islice方法获取前3个元素
sliced_iter = itertools.islice(letters, 3)

# 获取所有元素
for item in sliced_iter:
    print(item)
输出:
a
b
c

6.compress方法:根据指定的布尔选择器选择可迭代对象中的元素,并返回一个迭代器。

函数功能:

compress函数根据指定的布尔选择器选择可迭代对象中的元素,并返回一个迭代器。

语法:

itertools.compress(data, selectors)

参数介绍:

  • data:要进行选择的可迭代对象。

  • selectors:一个布尔选择器,用于指定哪些元素应该被选择。

返回值:

compress方法返回一个迭代器对象,其中包含可迭代对象中被选择的元素。

代码示例:

import itertools

# 创建一个列表
data = ['a', 'b', 'c', 'd', 'e']

# 创建一个布尔选择器
selectors = [True, False, True, False, True]

# 使用compress方法进行选择
compressed_iter = itertools.compress(data, selectors)

# 获取所有元素
for item in compressed_iter:
    print(item)
输出:
a
c
e

7.filterfalse方法:筛选出iterable中不满足predicate函数的元素。

函数功能:

filterfalse函数根据指定条件筛选可迭代对象中不满足条件的元素,并返回一个迭代器。

参数介绍:

  • predicate:一个用于判断和筛选元素的函数。它接受一个元素作为输入,并返回True或False。只要predicate返回False,元素就被视为满足筛选条件。
  • iterable:要进行筛选的可迭代对象。

返回值:

filterfalse方法返回一个迭代器对象,其中包含可迭代对象中不满足筛选条件的元素。

代码示例:

import itertools

# 创建一个列表
data = ['apple', 'banana', 'cherry', 'date', 'elderberry']

# 筛选长度大于5的元素
filtered_iter = itertools.filterfalse(lambda x: len(x) > 5, data)

# 获取所有元素
for item in filtered_iter:
    print(item)
输出:
apple
date

8.groupby方法:用于对可迭代对象进行分组,返回一个由相同键(key)的元素组成的迭代器

函数功能:

groupby函数对可迭代对象进行分组,将具有相同键的元素放在一起,返回一个由(key, group)元组组成的迭代器。

语法:

itertools.groupby(iterable, key=None)

参数介绍:

  • iterable:要进行分组的可迭代对象。
  • key:可选参数,用于指定一个函数,用于根据元素生成分组的键。如果未指定,则默认使用元素本身作为键。

返回值:
groupby方法返回一个迭代器对象,其中包含由相同键的元素组成的分组。

代码示例:

import itertools

# 创建一个列表
data = [1, 1, 2, 2, 3, 3, 4, 4]

# 使用groupby方法进行分组
grouped_iter = itertools.groupby(data)

# 获取每个分组的键和元素
for key, group in grouped_iter:
    print(f"Key: {key}, Group: {list(group)}")
输出:
Key: 1, Group: [1, 1]
Key: 2, Group: [2, 2]
Key: 3, Group: [3, 3]
Key: 4, Group: [4, 4]

9.permutations方法:生成可迭代对象中所有长度为r的排列组合,返回一个迭代器。

函数功能:
permutations函数用于生成可迭代对象中所有长度为r的排列组合。

语法:

itertools.permutations(iterable, r=None)

参数介绍:

  • iterable:要进行排列组合的可迭代对象。
  • r:可选参数,指定排列组合的长度。默认为None,表示使用可迭代对象的全部元素进行排列。

返回值:

permutations方法返回一个迭代器对象,其中包含可迭代对象中所有长度为r的排列组合。

代码示例:

import itertools

# 创建一个列表
data = ['a', 'b', 'c']

# 使用permutations方法生成所有长度为2的排列组合
permutations_iter = itertools.permutations(data, r=2)

# 获取所有排列组合
for item in permutations_iter:
    print(item)
输出:
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')

10.combinations方法:用于生成可迭代对象中所有长度为r的组合,返回一个迭代器。

函数功能:

combinations函数用于生成可迭代对象中所有长度为r的组合。

语法:

itertools.combinations(iterable, r)

参数介绍:

  • iterable:要进行组合的可迭代对象。
  • r:指定组合的长度。

返回值:

combinations方法返回一个迭代器对象,其中包含可迭代对象中所有长度为r的组合。

代码示例:

import itertools

# 创建一个列表
data = ['a', 'b', 'c']

# 使用combinations方法生成所有长度为2的组合
combinations_iter = itertools.combinations(data, r=2)

# 获取所有组合
for item in combinations_iter:
    print(item)    
输出:
('a', 'b')
('a', 'c')
('b', 'c')

11.product方法:于生成可迭代对象中的笛卡尔积,返回一个迭代器。

函数功能:
product函数用于生成可迭代对象中的笛卡尔积。

语法:

itertools.product(*iterables, repeat=1)

参数介绍:

  • iterables:一个或多个可迭代对象,用于生成笛卡尔积。
  • repeat:可选参数,默认为1,指定重复生成的次数。

返回值:

product方法返回一个迭代器对象,其中包含可迭代对象中的笛卡尔积。

代码示例:

import itertools

# 创建两个可迭代对象
colors = ['red', 'green']
sizes = ['S', 'M', 'L']

# 使用product方法生成两个可迭代对象的笛卡尔积
product_iter = itertools.product(colors, sizes)

# 获取所有笛卡尔积
for item in product_iter:
    print(item)
输出:
('red', 'S')
('red', 'M')
('red', 'L')
('green', 'S')
('green', 'M')
('green', 'L')

12.combinations_with_replacement方法:用于生成可迭代对象中所有长度为r的组合,允许元素重复,返回一个迭代器

函数功能:

combinations_with_replacement函数用于生成可迭代对象中所有长度为r的组合,允许元素重复。

语法:

itertools.combinations_with_replacement(iterable, r)

参数介绍:

  • iterable:要进行组合的可迭代对象。
  • r:指定组合的长度。

返回值:

combinations_with_replacement方法返回一个迭代器对象,其中包含可迭代对象中所有长度为r的组合,允许元素重复。

代码示例:

import itertools

# 创建一个列表
data = ['a', 'b', 'c']

# 使用combinations_with_replacement方法生成所有长度为2的组合,允许元素重复
combinations_iter = itertools.combinations_with_replacement(data, r=2)

# 获取所有组合
for item in combinations_iter:
    print(item)
输出:
('a', 'a')
('a', 'b')
('a', 'c')
('b', 'b')
('b', 'c')
('c', 'c')

13.dropwhile方法:用于从可迭代对象中跳过满足指定条件的元素,返回剩下的元素。

函数功能:

dropwhile函数用于从可迭代对象中跳过满足指定条件的元素,返回剩下的元素。

语法:

itertools.dropwhile(predicate, iterable)

参数介绍:

  • predicate:一个用于判断元素是否满足条件的函数。它接受一个元素作为输入,并返回True或False。只要predicate返回True,元素就会被跳过。

  • iterable:要进行操作的可迭代对象。

返回值:

dropwhile方法返回一个迭代器对象,其中包含了在跳过满足条件的元素后剩下的元素。

代码示例:

import itertools

# 创建一个列表
data = [1, 2, 3, 4, 5]

# 使用dropwhile方法跳过小于等于3的元素
dropped_iter = itertools.dropwhile(lambda x: x <= 3, data)

# 获取剩下的元素
for item in dropped_iter:
    print(item)
输出:
4
5

14.takewhile方法:用于获取可迭代对象中满足指定条件的元素,返回一个迭代器

函数功能:

takewhile函数用于获取可迭代对象中满足指定条件的元素,返回一个迭代器。

语法:

itertools.takewhile(predicate, iterable)

参数介绍:

  • predicate:一个用于判断元素是否满足条件的函数。它接受一个元素作为输入,并返回True或False。只要predicate返回True,元素就会被获取。
  • iterable:要进行操作的可迭代对象。

返回值:

takewhile方法返回一个迭代器对象,其中包含满足条件的元素。

代码示例:

import itertools

# 创建一个列表
data = [1, 2, 3, 4, 5]

# 使用takewhile方法获取小于等于3的元素
taken_iter = itertools.takewhile(lambda x: x <= 3, data)

# 获取满足条件的元素
for item in taken_iter:
    print(item)
输出:
1
2
3

15.zip_longest方法:用于将多个可迭代对象按照最长的迭代长度进行打包,返回一个迭代器。

函数功能:

zip_longest方法将多个可迭代对象按照最长的迭代长度进行打包,返回一个迭代器。当一个可迭代对象的迭代长度较短时,可以通过指定fillvalue参数来填充缺失的元素。

语法:

itertools.zip_longest(*iterables, fillvalue=None)

参数介绍:

  • iterables:多个可迭代对象,用于进行打包。
  • fillvalue:可选参数,用于填充较短可迭代对象中缺失的元素。默认为None。

返回值:

zip_longest方法返回一个迭代器对象,其中包含按照最长迭代长度打包的元素的元组。

代码示例:

import itertools

# 创建两个列表
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30]

# 使用zip_longest方法按最长迭代长度进行打包
zipped_iter = itertools.zip_longest(names, ages, fillvalue='Unknown')

# 获取所有打包后的元组
for item in zipped_iter:
    print(item)
输出:
('Alice', 25)
('Bob', 30)
('Charlie', 'Unknown')

16.starmap方法:用于对可迭代对象中的每个元素应用指定函数,返回一个迭代器

函数功能:

starmap函数用于对可迭代对象中的每个元素应用指定函数。

语法:

itertools.starmap(function, iterable)

参数介绍:

  • function:一个函数,接受多个参数作为输入。
  • iterable:要进行处理的可迭代对象。

返回值:

starmap方法返回一个迭代器对象,其中包含经过函数处理后的结果。

import itertools

# 创建一个列表
data = [(2, 5), (3, 7), (1, 4)]

# 使用starmap方法对每个元组中的数值求和
sum_iter = itertools.starmap(lambda x, y: x + y, data)

# 获取所有元素
for item in sum_iter:
    print(item)
输出:
7
10
5

17.tee方法:用于将一个可迭代对象复制成多个独立的迭代器

函数功能:

tee函数用于将一个可迭代对象复制成多个独立的迭代器,每个迭代器都可以单独进行迭代操作。

语法:

itertools.tee(iterable, n=2)

参数介绍:

  • iterable:要复制的可迭代对象。
  • n:可选参数,指定复制的迭代器的个数。默认为2,表示复制两个迭代器。

返回值:

tee方法返回一个包含多个迭代器的元组,每个迭代器都是独立的。

代码示例:

import itertools

# 创建一个列表
data = ['a', 'b', 'c']

# 使用tee方法将可迭代对象复制成两个独立的迭代器
iter1, iter2 = itertools.tee(data)

# 分别迭代两个迭代器
print("Iterator 1:")
for item in iter1:
    print(item)

print("Iterator 2:")
for item in iter2:
    print(item)
输出:
Iterator 1:
a
b
c
Iterator 2:
a
b
c

18.accumulate方法:用于对可迭代对象中的元素进行累积操作,返回一个迭代器

函数功能:
accumulate函数用于对可迭代对象中的元素进行累积操作,返回一个迭代器。每个生成的元素是当前位置之前所有元素的累积结果。

语法:

itertools.accumulate(iterable, func=operator.add)

参数介绍:

  • iterable:要进行操作的可迭代对象。
  • func:可选参数,用于指定进行累积操作的函数。默认为operator.add函数,即对所有元素进行加法累积。

返回值:

accumulate方法返回一个迭代器对象,其中包含累积操作的结果。

代码示例:

import itertools

# 创建一个列表
data = [1, 2, 3, 4, 5]

# 使用accumulate方法对列表中的元素进行累加操作
accumulated_iter = itertools.accumulate(data)

# 获取所有累积结果
for item in accumulated_iter:
    print(item)
输出:
1
3
6
10
15
posted @ 2023-07-01 21:40  我不知道取什么名字好  阅读(165)  评论(0编辑  收藏  举报