Перестановки в списки в Python - PullRequest
3 голосов
/ 25 сентября 2019

Скажем, у меня есть случайные строки в Python:

>>> X = ['ab', 'cd', 'ef']

Что я хотел бы сделать, это создать все перестановки строк (не кортежей), то есть:

['abcdef', 'abefcd', 'cdabef', 'cdefab', 'efabcd', 'efcdab']

list(itertools.permutations(X)) выводит:

[('ab', 'cd', 'ef'), ('ab', 'ef', 'cd'), ('cd', 'ab', 'ef'), ('cd', 'ef', 'ab'), ('ef', 'ab', 'cd'), ('ef', 'cd', 'ab')]

Я понимаю (я думаю), что из-за необходимости смешанных типов нам нужны кортежи вместо строк, но есть ли способ обойти это, чтобы получить строки?

Большое спасибо заранее?

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Используйте join(), чтобы присоединить кортеж перестановок, как вы потребляете, к итератору перестановок.

from itertools import permutations
X = ['ab', 'cd', 'ef']
result = [''.join(ele) for ele in permutations(X)]
1 голос
/ 25 сентября 2019

Вы можете использовать функцию string join для получаемых вами кортежей, чтобы уменьшить их до строк.Это стало еще проще с map, который может применять одну и ту же операцию к каждому элементу в списке и возвращать список измененных элементов.Вот как это будет выглядеть:

list(map(lambda x: ''.join(x), itertools.permutations(X)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...