如何在 python 的排列中找到最大数?



我想从排列中提取最大的数字。我现在正在使用 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 中运行,并用它来检查我的答案。

相关内容

  • 没有找到相关文章

最新更新