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