【问题标题】:How to find largest number in a permutation in python?如何在python的排列中找到最大的数字?
【发布时间】:2019-09-10 14:32:51
【问题描述】:

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


from groups import *

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

max([x for x in a])

【问题讨论】:

  • 排列与这里的最大数有什么关系?
  • 好吧,我需要找到更大排列的最大值。这只是一个例子
  • @NewYork 但是排列不会改变最大数量
  • 那么如果给定排列,我如何找到最大数量?
  • 我无法在 conda 或 PyPI 或快速网络搜索中找到任何名为 groups 的模块。你从哪里得到这个模块,它的文档在哪里?置换组有很多可能的实现方式,具体的实现方式对您的问题很重要。

标签: python math permutation finite-group-theory


【解决方案1】:

首先,您没有正确创建排列。正确的语法,最好在 your link 的第 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() 值感到满意。

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

【讨论】:

    【解决方案2】:

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

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

    然后遍历给定的排列。

    【讨论】:

      【解决方案3】:

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

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

      这段代码总是15作为输出。

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        相关资源
        最近更新 更多