Вы также можете сделать это, используя itertools.product .
Один из способов сделать это - сгенерировать все возможные продукты True
и False
, повторяющиеся для количества символов в text
, и используйте это, чтобы поместить каждый отдельный символ в нижний или верхний регистр.
from itertools import product
text = 'abcdef'
out = []
for capitalized in product([False, True], repeat=len(text)):
out.append(''.join([char.upper() if upper else char for char, upper in zip(text, capitalized)]))
print(out)
Вывод:
['abcdef', 'abcdeF', 'abcdEf', 'abcdEF', 'abcDef', 'abcDeF', 'abcDEf', 'abcDEF', 'abCdef', 'abCdeF', 'abCdEf', 'abCdEF', 'abCDef', 'abCDeF', 'abCDEf', 'abCDEF', 'aBcdef', 'aBcdeF', 'aBcdEf', 'aBcdEF', 'aBcDef', 'aBcDeF', 'aBcDEf', 'aBcDEF', 'aBCdef', 'aBCdeF', 'aBCdEf', 'aBCdEF', 'aBCDef', 'aBCDeF', 'aBCDEf', 'aBCDEF', 'Abcdef', 'AbcdeF', 'AbcdEf', 'AbcdEF', 'AbcDef', 'AbcDeF', 'AbcDEf', 'AbcDEF', 'AbCdef', 'AbCdeF', 'AbCdEf', 'AbCdEF', 'AbCDef', 'AbCDeF', 'AbCDEf', 'AbCDEF', 'ABcdef', 'ABcdeF', 'ABcdEf', 'ABcdEF', 'ABcDef', 'ABcDeF', 'ABcDEf', 'ABcDEF', 'ABCdef', 'ABCdeF', 'ABCdEf', 'ABCdEF', 'ABCDef', 'ABCDeF', 'ABCDEf', 'ABCDEF']
Или создав произведение кортежей (char, char.upper())
:
from itertools import product
text = 'abcdef'
out = []
for chars in product(*((c, c.upper()) for c in text)):
out.append(''.join(chars))
print(out)