Найти - Пользователи
Полная версия: Все перестановки всех длин.
Начало » Python для новичков » Все перестановки всех длин.
1
kanz
Здравствуйте. Нужна помощь в написании одной функции.
На вход ей подаётся list, в котором лежат строки.
Функция генерирует все перестановки всех длин.
Пример: на вход ‘AB’, ‘CD’, ‘XY’, ‘MN’
Выдает (очередь не важна)
AB
CD
XY
MN
ABAB
ABCD
ABXY
ABMN
CDAB
CDCD
CDXY
CDMN

MNAB
MNCD
MNXY
MNMN
ABCDXY
ABXYCD
CDXYAB
CDABXY
XYABCD
XYCDAB
… и т.д.


Как это написать это, подскажите, пожалуйста.
Использоваться она потом будет в программе, где нужно найти все палиндромы из слов текста, который на вход получен.
sergeek
from itertools import product
def permutate(lst,n):
    return '\n'.join(['\n'.join(''.join(e) for e in product(lst,repeat=k)) for k in range(n+1)])
print(permutate(['AB','CD','XY','MN'],2))
 
AB
CD
XY
MN
ABAB
ABCD
ABXY
ABMN
CDAB
CDCD
CDXY
CDMN
XYAB
XYCD
XYXY
XYMN
MNAB
MNCD
MNXY
MNMN
kanz
Спасибо, но нет.
Я написал — нужно составить все.
Это значит, что вариантов у нас просто уйма.
К примеру, на входе было ab, cd, xy, mn, ok, tu (слова текста)
Функция должна генерировать вообще всё, что можно.
Скажем, даже такие варианты: xyoktu, tuabmn, okcdmn, abtuxy, okxytucd, xytuabmn, tucdokab и т.д.
Т.е. перебирать все возможные сочетания, и всех возможных длин.
bismigalis
from itertools import product
def permutate(lst):
    l = len(lst)
    for i in range(1,l+1):
        for tup in product(lst,repeat=i):
            yield ''.join(tup)
print(* permutate(['AB','CD','XY','MN','OK','TU']), sep='\n')
py.user.next
>>> import itertools
>>> 
>>> lst = ['AB','CD','XY','MN']
>>> n = 3
>>> 
>>> combs = itertools.chain(*(itertools.permutations(lst, i)
...                           for i in range(1, n + 1)))
>>> print(*map(''.join, combs), sep='\n')
AB
CD
XY
MN
ABCD
ABXY
ABMN
CDAB
CDXY
CDMN
XYAB
XYCD
XYMN
MNAB
MNCD
MNXY
ABCDXY
ABCDMN
ABXYCD
ABXYMN
ABMNCD
ABMNXY
CDABXY
CDABMN
CDXYAB
CDXYMN
CDMNAB
CDMNXY
XYABCD
XYABMN
XYCDAB
XYCDMN
XYMNAB
XYMNCD
MNABCD
MNABXY
MNCDAB
MNCDXY
MNXYAB
MNXYCD
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB