-5

我想从排列中提取最大的数字。我现在正在使用组模块,所以下面代码中的输出应该是 15


from groups import *

a = Perm((1, 2, 3), (4, 15, 6), (7, 8, 9))

max([x for x in a])
4

3 回答 3

0

如果只想找到最大值,我并没有得到你想要的这些排列。但是你试试这个-

    from itertools import permutations 
    perm = permutations([1, 2, 3, 4, 15, 6, 7, 8, 9]) 
    for i in list(perm): 
    print (max(i)) 

这段代码将始终 15 作为输出。

于 2019-04-20T20:04:38.097 回答
0

首先,您没有正确创建排列。正确的语法,最好在您的链接的第 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与其先前的值进行比较。但现在产生了价值。因此不一致并且取决于排列的当前内部表示,因此使用该值是不明智的。==Truemax(a)20max(a)

幸运的是,您可以找到一个更一致的“最高数”,即被排列改变的最高数:

highestnum = a.max()

这也会返回你想要的结果,15. 访问a[20]或任何其他值都不会改变a.max(),因此您应该对该max()值感到满意。

顺便说一句,关于您链接的文档,这里有一个更好的文档链接,它是您链接到的预印本的完成版本。这里是源代码的链接。但是,我在上面写的内容中提到了您的链接。该文档中的 Python 代码使用 Python 2.6:我进行了一些更改,使其在 Python 3.7 中运行并使用它来检查我的答案。

于 2019-04-21T16:38:25.600 回答
0

使用以下定义排列的最大值:

p = permutations([1, 2, 3])
l = list(p)
max(l[0])

然后迭代给定的排列。

于 2019-04-20T19:29:36.573 回答