我需要在python中列出所有可能的 case only 排列
例如,输入ar将返回
['ar','Ar','aR','AR']
或弧形
['arc','Arc','ARc','aRc','aRC','ARC']我知道可能有一些Nice方法,但对于我的生活,我无法理解它。
答案 0 :(得分:15)
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']
答案 1 :(得分:0)
您可以通过 zipping 大写和小写字母并采用它们的笛卡尔 product 来实现:
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'