Как создавать комбинации в python?

#python

#python

Вопрос:

Как сгенерировать все комбинации с 3 прописными буквами в строке? Например:

 f("abcde") => ['ABCde', 'aBCDe', 'abCDE', 'ABcDe', 'ABcdE' ...]
  

Комментарии:

1. и что вы пробовали?

Ответ №1:

Одним из способов было бы сгенерировать декартово произведение букв (как в нижнем, так и в верхнем регистре), а затем сохранить их, только если в них ровно 3 заглавные буквы

 from itertools import product
def combs(s, n):
    pairs = tuple(i.lower()   i.upper() for i in s)
    for i in product(*pairs):
        if sum(1 for j in i if j.isupper()) == n:
            yield ''.join(i)
  

Пример

 for s in combs('abcde', 3):
    print(s)
  

Вывод

 abCDE
aBcDE
aBCdE
aBCDe
AbcDE
AbCdE
AbCDe
ABcdE
ABcDe
ABCde
  

Ответ №2:

 def f(s):
    r = []
    for i in range(1, len(s)-1):
        for j in range(i 1, len(s)):
            r.append(s[:i].capitalize()   s[i:j].capitalize()   s[j:].capitalize())
    return r