Python Shuffle и печать строки и без обратной строки - PullRequest
0 голосов
/ 26 июня 2018

Допустим, у меня есть строка, s='AADD'.Я использовал more_itertools и отдельную перестановку, которая выводила бы (AADD,ADDA,DDAA,ADAD,DADA,DAAD).

Мой вопрос в том, что AADD и DDAA, ADAD и DADA по сути являются зеркальным отображением друг друга, я хочу избавиться от одного из них, как мне пересмотреть мой коддля достижения этой цели?

import more_itertools

s = 'AADD'
#counting = 0
for i in more_itertools.distinct_permutations(s):
    print(''.join(i))
    #counting += 1

Обновление: у меня есть еще один вопрос, касающийся большого объема обработки данных.Допустим, моя строка «s» содержит 50 букв вместо 4, мне интересно, является ли «Different_permutation» из «more_itertools» наиболее эффективным способом сделать это?Я использовал Mathematica для вычисления всех возможных комбинаций, существует более 10 возможных комбинаций, интересно, есть ли более быстрый способ решения этой задачи.Заранее извиняюсь, если этот вопрос глуп, потому что я не учился ни одному классу кодирования и одновременно учусь программировать сам, пока выполняю проект.

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Простое однострочное решение, не требующее временного набора или списка, используя тот факт, что оператор «больше или равно» работает с последовательностями в python:

>>> from more_itertools import distinct_permutations
>>> [''.join(l) for l in distinct_permutations('AADD') if l >= l[::-1]]
['DDAA', 'DADA', 'ADDA', 'DAAD']
0 голосов
/ 26 июня 2018

Вот решение без использования reverse / reversed.Это работает на логике, что для данной строки w, w[::-1] будет обратной строкой.

>>> import more_itertools
>>> s_list = list(map(''.join, more_itertools.distinct_permutations('AADD')))
>>> [w for w in s_list if w <= w[::-1]]
['ADDA', 'DAAD', 'ADAD', 'AADD']
0 голосов
/ 26 июня 2018

Вы можете использовать reversed() здесь:

import more_itertools

s = 'AADD'

options = [i for i in more_itertools.distinct_permutations(s)]

no_mirrors = []
for i in options:
    if tuple(reversed(i)) not in no_mirrors:
        no_mirrors.append(i)

for i in no_mirrors:
    print(''.join(i))

Вывод:

DDAA
DADA
ADDA
DAAD
...