Python3 中的迭代工具
Itertools是Python中的一个模块,它用于迭代可以使用 for 循环单步执行的数据结构。这种数据结构也称为可迭代对象。该模块可作为一种快速、高效的内存工具,可单独使用或组合使用以形成迭代器代数。
为什么要使用?
该模块包含有效利用计算资源的功能。使用这个模块也倾向于增强代码的可读性和可维护性。
石斑鱼食谱
grouper()函数可以在 itertools 文档的食谱部分找到。这些食谱是使用 itertools 发挥优势的绝佳灵感来源。
例子
python3
# Python code to demonstrate the
# grouper Recipe
import itertools as it
# defining the grouper function
def grouper(inputs, n, fillvalue = None):
iters = [iter(inputs)] * n
return it.zip_longest(*iters, fillvalue = fillvalue)
alpha = ['g', 'e', 'e', 'k', 's', 'f', 'o',
'r', 'g', 'e', 'e', 'k', 's']
print(list(grouper(alpha, 3)))
python3
# Python code to demonstrate combinations
import itertools as it
print(list(it.combinations([1, 2], 2)))
python3
# Python code to demonstrate combinations_with_replacement
import itertools as it
print(list(it.combinations_with_replacement([1, 2], 2)))
python3
# Python code to demonstrate permutations
import itertools as it
print(list(it.permutations(['g', 'e', 'k'])))
python3
# Python code to demonstrate flattening a list of lists
import itertools as it
list_of_lists = [[1, 2], [3, 4]]
chain_object = it.chain.from_iterable(list_of_lists)
# Return chain object with nested lists separated
# Convert to list to flatten
flattened_list = list(chain_object)
print(flattened_list)
输出 :
[(‘g’, ‘e’, ‘e’), (‘k’, ‘s’, ‘f’), (‘o’, ‘r’, ‘g’), (‘e’, ‘e’, ‘k’), (‘s’, None, None)]
蛮力场景
蛮力是一种解决问题的直接方法,它依赖于纯粹的计算能力并尝试各种可能性,而不是先进的技术来提高效率。有不同的蛮力 itertools函数,例如:
- 组合()
- combination_with_replacement()
- 排列()
组合()
itertools.combinations()函数接受两个参数——一个可迭代的输入和一个正整数 n——并在输入中 n 个元素的所有组合的元组上生成一个迭代器。
例子
蟒蛇3
# Python code to demonstrate combinations
import itertools as it
print(list(it.combinations([1, 2], 2)))
输出 :
[(1, 2)]
combination_with_replacement()
combination_with_replacement() 的工作方式与 combine() 类似,接受一个可迭代的输入和一个正整数 n,并返回一个迭代器,该迭代器对来自输入的 n 元组元素进行迭代。不同之处在于combinations_with_replacement() 允许元素在它返回的元组中重复。
例子
蟒蛇3
# Python code to demonstrate combinations_with_replacement
import itertools as it
print(list(it.combinations_with_replacement([1, 2], 2)))
输出 :
[(1, 1), (1, 2), (2, 2)]
排列()
排列是一组对象的集合或组合,其中所选对象的顺序或排列确实很重要。 permutations() 接受单个可迭代对象并生成其元素的所有可能排列(重新排列)。
例子
蟒蛇3
# Python code to demonstrate permutations
import itertools as it
print(list(it.permutations(['g', 'e', 'k'])))
输出 :
[(‘g’, ‘e’, ‘k’), (‘g’, ‘k’, ‘e’), (‘e’, ‘g’, ‘k’), (‘e’, ‘k’, ‘g’), (‘k’, ‘g’, ‘e’), (‘k’, ‘e’, ‘g’)]
展平列表列表
将列表列表 (2D) 转换为列表 (1D) 称为展平。展平列表列表会将所有子列表合并为一个统一列表。
例子
蟒蛇3
# Python code to demonstrate flattening a list of lists
import itertools as it
list_of_lists = [[1, 2], [3, 4]]
chain_object = it.chain.from_iterable(list_of_lists)
# Return chain object with nested lists separated
# Convert to list to flatten
flattened_list = list(chain_object)
print(flattened_list)
输出 :
[1, 2, 3, 4]