我想从排列中提取最大的数字。我现在正在使用 groups 模块,所以以下代码中的输出应该是 15
from groups import *
a = Perm((1, 2, 3), (4, 15, 6), (7, 8, 9))
max([x for x in a])
如果只想找到最大值,我没有得到你想要的这些排列。但你试试这个——
from itertools import permutations
perm = permutations([1, 2, 3, 4, 15, 6, 7, 8, 9])
for i in list(perm):
print (max(i))
这段代码将始终为 15 作为输出。
使用以下命令定义排列的最大值:
p = permutations([1, 2, 3])
l = list(p)
max(l[0])
然后迭代给定的排列。
首先,您没有正确创建排列。正确的语法(最好在第 23 页的链接中看到)是
a = Perm()(1, 2, 3)(4, 15, 6)(7, 8, 9)
接下来,设置该模块,以便理论上它排列所有非负整数,其中有限多个映射到自身以外的值。因此,从理论上讲,该模块中的排列中没有最高数字。正如您的链接在第 5 页上所述,
perm 大小n未定义,因为未显式定义的键等于其值 (p[i] == i)。
因此,在一个方面,你追求"从排列中提取最高数字"是没有意义的。但是,在任何给定时间,表示该模块中排列的数据结构确实具有最大数量。该模块试图对用户隐藏该信息,以保持对所有非负整数进行操作的理论观点。但由于Perm
类派生自dict
内置类型,因此您可以在该结构中找到当前的最高数字
highestnum = max(a)
在您的示例中,这确实返回值15
。但请注意,最大值很容易更改,而不会更改所表示的排列。例如,如果你执行print(a[20])
,这似乎不会改变排列a
,并且使用==
将a
的值与其先前的值进行比较会产生True
。但现在max(a)
产生了价值20
.因此max(a)
不一致,并且取决于排列的当前内部表示,因此使用此值是不明智的。
幸运的是,你可以找到一个更一致的"最高数字",即由排列改变的最高数字:
highestnum = a.max()
这还会返回您想要的结果,15
.访问a[20]
或任何其他值不会更改a.max()
,因此您应该对max()
值感到满意。
顺便说一下,关于您链接的文档,这里有一个更好的文档链接,它是您链接到的预印本的完成版本。这是源代码的链接。但是,我在上面写的内容中提到了您的链接。该文档中的 Python 代码使用 Python 2.6:我做了一些更改,使其在 Python 3.7 中运行,并用它来检查我的答案。