LINUX.ORG.RU

Т.е. если у тебя есть три слова «пиво», «водка» и «селёдка», то сколько вариантов тебе нужно получить? Все комбинации из 3 слов, или из двух или даже одного слова тебе тоже норм?

justAmoment ★★★★★
()
vse_varianty=479001600
anonymous
()
>>> from itertools import permutations
>>> list(permutations(["a", "b", "c"], 3))
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
>>> 
Virtuos86 ★★★★★
()
Ответ на: комментарий от noname_user
import itertools as it

lst = [1,2,3]
rng = range(0, len(lst)+1)
for x in rng:
    for i in it.permutations(lst, x):
        print(i)
()
(1,)
(2,)
(3,)
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
Niroday
()
Ответ на: комментарий от Niroday

во всем разобрался вроде как, но в рендже нет, мне требуеться выводить только по 12 слов в разных комбинациях

noname_user ★★★
() автор топика
Ответ на: комментарий от noname_user

Сходил в интернет, почитал про itertools, проверил permutations.

$ python3
Python 3.6.4 (default, Jan 15 2018, 18:44:26) 
[GCC 7.2.1 20170915 (Red Hat 7.2.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from itertools import permutations
>>> x=['пиво', 'водка', 'селёдка']
>>> data = list(permutations(x, 3))
>>> print(data)
[('пиво', 'водка', 'селёдка'), ('пиво', 'селёдка', 'водка'), ('водка', 'пиво', 'селёдка'), ('водка', 'селёдка', 'пиво'), ('селёдка', 'пиво', 'водка'), ('селёдка', 'водка', 'пиво')]

Если исходник больше 3 слов, а надо комбинации только из трёх то выходит вот так.

>>> x=['пиво', 'водка', 'селёдка', 'тушёнка']
>>> data = list(permutations(x, 3))
>>> print(data)
[('пиво', 'водка', 'селёдка'), ('пиво', 'водка', 'тушёнка'), ('пиво', 'селёдка', 'водка'), ('пиво', 'селёдка', 'тушёнка'), ('пиво', 'тушёнка', 'водка'), ('пиво', 'тушёнка', 'селёдка'), ('водка', 'пиво', 'селёдка'), ('водка', 'пиво', 'тушёнка'), ('водка', 'селёдка', 'пиво'), ('водка', 'селёдка', 'тушёнка'), ('водка', 'тушёнка', 'пиво'), ('водка', 'тушёнка', 'селёдка'), ('селёдка', 'пиво', 'водка'), ('селёдка', 'пиво', 'тушёнка'), ('селёдка', 'водка', 'пиво'), ('селёдка', 'водка', 'тушёнка'), ('селёдка', 'тушёнка', 'пиво'), ('селёдка', 'тушёнка', 'водка'), ('тушёнка', 'пиво', 'водка'), ('тушёнка', 'пиво', 'селёдка'), ('тушёнка', 'водка', 'пиво'), ('тушёнка', 'водка', 'селёдка'), ('тушёнка', 'селёдка', 'пиво'), ('тушёнка', 'селёдка', 'водка')]

justAmoment ★★★★★
()
Последнее исправление: justAmoment (всего исправлений: 2)
Ответ на: комментарий от noname_user

Тогда не «все варианты», а только варианты из 12 элементов. Код у Virtuos86 подойдет. Если из моего делать, то

import itertools as it

lst = [1,2,3]
for i in it.permutations(lst, 3):
    print(i)
Будет печатать только комбинации из всех трех элементов. В вашем случае заменить на 12.

Niroday
()

Липский «Комбинаторика для программистов»

Стандартные либы пока рано использовать

anonymous
()
Ответ на: комментарий от noname_user

Раз нашёл решение, так напиши. Как ты запросто перебираешь 12! вариантов на скриптоне, и при этом не биткойновый муллионер?

anonymous
()

Зачем тебе пистон? Бери баш:

echo {пиво,водка,селёдка}{пиво,водка,селёдка}{пиво,водка,селёдка}
пивопивопиво пивопивоводка пивопивоселёдка пивоводкапиво пивоводкаводка пивоводкаселёдка пивоселёдкапиво пивоселёдкаводка пивоселёдкаселёдка водкапивопиво водкапивоводка водкапивоселёдка водкаводкапиво водкаводкаводка водкаводкаселёдка водкаселёдкапиво водкаселёдкаводка водкаселёдкаселёдка селёдкапивопиво селёдкапивоводка селёдкапивоселёдка селёдкаводкапиво селёдкаводкаводка селёдкаводкаселёдка селёдкаселёдкапиво селёдкаселёдкаводка селёдкаселёдкаселёдка

ashot ★★★★
()
Ответ на: комментарий от anonymous

Удивительный случай когда в треде самый адекватный - аниномус. Вы свой код запускали вообще? Какой питон, какой баш - там 12! вариантов.

В вашем случае заменить на 12.

Ну замени, если не свалится программа - расскажешь сколько у тебя оперативки. 12! это примерно 2^29, чтобы было понятно.

Автору - гуглить генерацию перестановок в лексикографическом порядке. Может и на питоне есть такое в стандартной библиотеке, но нужно по предыдущей перестановке получать следующую, а не все перестановки целиком и сразу - они просто никуда не влезут.

tim239 ★★
()
Последнее исправление: tim239 (всего исправлений: 1)
Ответ на: комментарий от tim239

Так а itertools.permutations вроде как и не возвращает список :/

Согласен, конечно, что ОП не умеет теорию, но...

cdshines ★★★★★
()
Ответ на: комментарий от tim239

Гадать, зачем и что автору, к чему? Может он просто интересуется альтернативами. Понятно, что если речь идет о таких объемах, ленивые вычисления подойдут прекрасно. Но никто же не интересуется «на каком языке оптимально написать такой то алгоритм».

Niroday
()
Ответ на: комментарий от anonymous

ох уж эти анонимусы, во первых удивлю тебя, бывают еще и 9, 15 фраз восстановительных, а не только bip32 на 12 фраз и с чего ты взял что именно эфир, быть может ripple bitcoin?))))

noname_user ★★★
() автор топика
Ответ на: комментарий от tim239

на 50% прав, но в том плане, что я знаю свои фразы на изусть без «бумажек», но не помню последовательность, там мои битки, а вообще если подбирать хоть какой то паспрейс, займет около 9 лет в лучшем лучае на квантовом процессоре)))))
так что вы все тут понимаете весь абсурд этих слов)

noname_user ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.