在Python中寻找所有可能的大小写排列
我需要在Python中返回一个字符串的所有可能的大小写排列。
比如,输入 "ar"
应该返回:
[ 'ar','Ar','aR','AR']
或者输入 "arc"
:
[ 'arc','Arc','ARc','aRc','aRC','ARC']
2 个回答
4
你可以通过将大写字母和小写字母配对,然后计算它们的笛卡尔乘积来实现这个功能:
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'
21
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']
这段内容是关于编程的问题,涉及到一些技术细节。具体的代码块和内容没有给出,但可以想象这里可能有一些代码示例或者技术讨论。
如果你是编程新手,看到这些内容可能会觉得有点复杂。其实,编程就像是在给计算机下指令,让它按照你的想法去做事情。每一段代码都是一个小小的指令,组合在一起就能完成更大的任务。
在学习编程的过程中,遇到问题是很正常的。重要的是要保持好奇心,勇于尝试,慢慢你就会理解这些技术细节了。
记住,编程的世界很大,慢慢来,逐步掌握就好!