Python Itertools包中的组合技术

333 阅读5分钟

我们通过利用Itertools来介绍combinations()函数。然而,在进一步深入研究该主题之前,理解它的使用是至关重要的。让我们先看一下它。在进行不同的计算时,我们经常遇到组合或排列组合。但是,尽管我们可能会计算数字,但有时处理大的数值会很有挑战性。想一想,如果我们有工具可以为用户做出这样的判断,可能会发生什么?

Itertools软件包

Itertools软件包正好满足了我们的要求。不过,它的范围还不止这些。它提供了额外的方法,也促进了其他预定义的操作。但是这个包被分为三种类型,即。无限迭代器、组合迭代器和终结迭代器。

我们将只讨论combinations()函数,因为这个模块太重要了,在这一点上不能完全描述。在继续讨论的同时,让我们看看如何部署它,如何整合它,以及看看组合包括什么。

安装

由于这种方法是内置于Python中的,所以不需要安装程序。在利用它之前,我们必须整合它。可以用下面的命令来完成它。

# Import itertools

组合的定义

当我们考虑组合时,我们可以把它们定义为组织一组对象的方法。组合中各部分的顺序并不重要,因此 "xy "的作用与 "yx "类似。

Combinations()方法

该特定函数是Itertools包的组合学分类的一个组成部分。这一组包括像product()和permutations()的附加函数。另一方面,combinations()函数通常处理对所提供的数据集合来说可能是可行的每个组合。

更准确地说,建议的方法是显示每一个独特的数据组合,没有任何替换。然而,我们可以利用combinations_with_replacement()方法来显示每一个带替换的组合。在这两种情况下,我们必须按适当的顺序提供参数。现在,我们将讨论如何利用Python中的combinations()方法。

例1:

通过使用combinations()方法,我们将展示本例中字母 "information "的两字组合的集合。

from itertools import combinations
 
str = 'information'
a = len(str)
print(a)
 
combination = combinations(str,2)
 
x = [' '.join(j) for j in combination]
print(x)
print(len(x))


为了开始编写代码,我们整合了 "itertools "框架中的 "combinations "包。现在,我们定义了 "信息 "一词,该词被存储在 "str "变量中。我们调用len()方法来查找指定字母的长度。然后,我们打印该字母的长度。使用 "information "这个词,我们必须获得所有可能的组合。因此,我们应用组合()函数。我们选择数字 "2 "来代表这组数值的总数。然后,我们在接下来的步骤中调用join()函数。

与此同时,我们还利用 "for "循环来获得所有定义词的可能组合。为了保存这些可能的组合,我们必须定义一个变量 "x"。现在,print()函数被用来显示这些组合。最后,我们在len()方法的帮助下找出组合的总数,并通过print()函数显示该长度。


由于我们在前面的例子中没有对字母进行排序,所以定义的字符串以词典的方式包含了这些字母。

例2:

从上一例的结果中我们会发现,在排列过程中,字母并没有被改变。我们还有一个替换设置的选项。combinations_with_replacement()技术允许我们完成这个任务。这里有一个插图。

from itertools import combinations, combinations_with_replacement
 
w = 'badminton'
m = len(w)
print(m)
 
combination = combinations_with_replacement(w,3)
 
c = [' '.join(l) for l in combination]
print(c)
print(len(c))


在我们开始编码之前,必须纳入 "itertools "框架中的 "组合 "和 "带替换的组合 "库。现在,我们指定术语 "badminton",它被保存在变量 "w "中。为了确定所提供单词的长度,我们利用len()函数。然后,我们显示这个字母有多长。我们只是想用 "信息 "这个词来确定每个可行的组合。

为了做到这一点,我们用replacement()调用函数组合。我们希望包含在组合中的项目数量被指定为 "3"。我们在接下来的步骤中使用join()方法。此外,我们使用 "for "循环来获得指定术语的每个可能的组合。为了保留可能的组合,我们必须声明一个名为 "c "的属性。

现在,通过使用print()方法来展示这些组合。在最后一步,我们使用len()函数来计算组合的总数,并使用print()方法来显示这个长度。

例3:

我们可能需要从Pandas的数据框中检索组合。lambda方法将被用来完成它。让我们来看看下面的情况。

import pandas as pd
from itertools import combinations
 
d_f = pd.DataFrame({'subj1':('x','z'), 'subj2': ('i','j'), 'subj3': ('r', 's'),  'subj4': ('a', 'e')})
 
d_f['combinations'] = d_f.apply(lambda v: list(combinations(v, 2)), axis=1)
print(d_f)


我们导入两个必要的头文件,其中包括 "pandas "作为 "pd",以及 "itertools "模块的 "combinations"。我们通过使用DataFrame()来创建一个数据集。这个函数与pandas库有关。我们在这个函数中定义数据集的元素。

在接下来的步骤中,我们利用lambda和组合方法。lambda方法包含两个参数。我们在这里指定轴的值。为了存储生成的组合,我们在数据集中插入一列,称为组合。最后,我们在print()方法的帮助下表示所需的数据集。

总结

本文讨论了Itertools包中的组合技术。它的语法、设置和导入系统的程序都进行了演示。然后,我们研究了如何通过使用组合函数和采用包括字符串和数组在内的各种数据类型来创建字母的组合。在使用combinations()方法时,我们使用了dataframe模块。在一个例子中,我们进行了有替换的组合,在另一个例子中,我们进行了无替换的组合。