Мне нужно вернуть список всех возможных перестановок case строки в python.
Например, ввод "ar"
должен возвращать:
[ 'ar','Ar','aR','AR']
or "arc"
:
[ 'arc','Arc','ARc','aRc','aRC','ARC']
Мне нужно вернуть список всех возможных перестановок case строки в python.
Например, ввод "ar"
должен возвращать:
[ 'ar','Ar','aR','AR']
or "arc"
:
[ 'arc','Arc','ARc','aRc','aRC','ARC']
Этого можно добиться, заархивировав прописные и строчные буквы и взяв их декартовский продукт:
import itertools
chars = "abc"
results = list(map(''.join, itertools.product(*zip(chars.upper(), chars.lower()))))
print(results)
>>>['ABC', 'ABc', 'AbC', 'Abc', 'aBC', 'aBc', 'abC', 'abc']
Чтобы представить, как это работает:
zip
создает для нас 3 "оси", каждая с 2 точками (верхний/нижний регистр): [('A', 'a'),
('B', 'b'),
('C', 'c')]
product
берет декартово произведение этих осей, то есть 8 возможных координат, соответствующих углам единичного куба, который он создает:''.join
объединяет кортежи для вывода строки: ('A','B','C') -> 'ABC'
'a'
никогда не должно равняться 'A'
) и нарезать первый символ (по сравнению с input_string[0]
)?
- person Maximilian Burszley; 02.09.2018
'.'.upper() == '.'.lower()
- person Paul McMillan; 02.07.2019
itertools.product(*zip(string.lower(), string.upper()))
. - person agf   schedule 11.04.2012