在Python中寻找所有可能的大小写排列

8 投票
2 回答
7756 浏览
提问于 2025-04-16 22:05

我需要在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']

为了让你更好地理解这个过程:

  1. zip函数为我们创建了3个“坐标轴”,每个坐标轴上有2个点(大写和小写字母):
    [('A', 'a'), 
     ('B', 'b'), 
     ('C', 'c')]
    
  2. product函数则计算这些坐标轴的笛卡尔乘积,也就是它生成的单位立方体的8个可能的角落坐标:
enter image description here enter image description here
1. 创建坐标轴 2. 计算笛卡尔乘积
  1. ''.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']

这段内容是关于编程的问题,涉及到一些技术细节。具体的代码块和内容没有给出,但可以想象这里可能有一些代码示例或者技术讨论。

如果你是编程新手,看到这些内容可能会觉得有点复杂。其实,编程就像是在给计算机下指令,让它按照你的想法去做事情。每一段代码都是一个小小的指令,组合在一起就能完成更大的任务。

在学习编程的过程中,遇到问题是很正常的。重要的是要保持好奇心,勇于尝试,慢慢你就会理解这些技术细节了。

记住,编程的世界很大,慢慢来,逐步掌握就好!

撰写回答