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

问题描述 投票:-4回答:3

我想从排列中提取最高数字。我现在正在使用groups模块,因此下面代码中的输出应为15


from groups import *

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

max([x for x in a])
python math permutation finite-group-theory
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作为输出。


0
投票

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

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

然后迭代给定的排列。


0
投票

首先,您没有正确创建排列。正确的语法,最好见于your link的第23页,是

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

接下来,设置该模块,以便理论上它可以置换所有非负整数,其中有限多个映射到除自身之外的值。因此理论上,该模块中的排列中没有最高数字。如第5页的链接所示,

烫发大小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()值来满足自己。

顺便说一句,关于您的链接文档,这里是a better link文档,这是您链接到的预打印的完成版本。这里是a link to the source code。但是,我在上面写的内容中提到了你的链接。该文档中的Python代码使用Python 2.6:我进行了一些更改,因此它在Python 3.7中运行并用于检查我的答案。

© www.soinside.com 2019 - 2024. All rights reserved.