Как найти наибольшее число в перестановке в Python? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу извлечь наибольшее число из перестановки.Я сейчас использую модуль groups, поэтому вывод в приведенном ниже коде должен быть 15


from groups import *

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

max([x for x in a])

Ответы [ 3 ]

0 голосов
/ 20 апреля 2019

Я не получаю именно то, что вы хотите, эти перестановки, если только хотите найти максимум. Но вы попробуйте это -

    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 голосов
/ 21 апреля 2019

Во-первых, вы неправильно создаете свою перестановку.Правильный синтаксис, который лучше всего видеть на странице 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().

Кстати, в отношении вашего связанного документа, вот лучшая ссылка к документации, которая является законченной версией препринта, на который вы ссылались.А вот ссылка на исходный код .Однако я сослался на вашу ссылку в том, что написал выше.Код Python в этом документе использует Python 2.6: я внес некоторые изменения, чтобы он работал в Python 3.7, и использовал это для проверки моего ответа.

0 голосов
/ 20 апреля 2019

Используйте следующее для определения максимума перестановки:

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

, а затем выполните итерацию по заданным перестановкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...