Поиск всех возможных вариантов перестановки в Python

1

Мне нужно выработать список всех возможных перестановок только случая в python например, со входом ar, он вернется ['ar', 'Ar', 'aR', 'AR']
или дуги ['arc', 'Arc', 'ARc', 'aRc', 'aRC', 'ARC'], и я знаю, что есть какой-то хороший метод, но для жизни я не могу понять.

  • 0
    То, что вы просите, это в основном алгоритм, если вы знаете алгоритм, который вы можете реализовать на любом языке, который вы хотите (Python). Все, что я могу вам помочь, это: рекурсия. (может помочь что-то на бумаге)
  • 0
    @nekosune: Из любопытства, для чего вы используете эту функцию? Я обеспокоен тем, что, может быть, вы используете это, чтобы сравнить строку неизвестного случая, чтобы увидеть, соответствует ли оно слову. Если это так, есть лучшие способы сделать это.
Показать ещё 3 комментария
Теги:
string
permutation

1 ответ

12
Лучший ответ
def all_casings(input_string):
    if not input_string:
        yield ""
    else:
        first = input_string[:1]
        if first.lower() == first.upper():
            for sub_casing in all_casings(input_string[1:]):
                yield first + sub_casing
        else:
            for sub_casing in all_casings(input_string[1:]):
                yield first.lower() + sub_casing
                yield first.upper() + sub_casing

>>> [x for x in all_casings("foo")]
['foo', 'Foo', 'fOo', 'FOo', 'foO', 'FoO', 'fOO', 'FOO']
>>> list(all_casings("foo"))
['foo', 'Foo', 'fOo', 'FOo', 'foO', 'FoO', 'fOO', 'FOO']
  • 0
    Спасибо большое, это было прекрасно. Алгоритмы, особенно рекурсивные, всегда были моим слабым местом.
  • 0
    Я немного запутался. Какой смысл сравнивать прописные / строчные буквы (так как 'a' никогда не должно равняться 'A' ) и вырезать первый символ (по сравнению с input_string[0] )?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню