查找字符串的所有上,下和混合大小写组合

Whi*_*key 16 python string

我想编写一个带字符串的程序,比方说"Fox",它会显示:

fox, Fox, fOx, foX, FOx, FoX, fOX, FOX
Run Code Online (Sandbox Code Playgroud)

我的代码到目前为止:

string = raw_input("Enter String: ")
length = len(string)
for i in range(0, length):
    for j in range(0, length):
        if i == j:
            x = string.replace(string[i], string[i].upper())
            print x
Run Code Online (Sandbox Code Playgroud)

目前为止的输出:

Enter String: fox
Fox
fOx
foX
>>> 
Run Code Online (Sandbox Code Playgroud)

eph*_*ent 29

>>> import itertools
>>> map(''.join, itertools.product(*((c.upper(), c.lower()) for c in 'Fox')))
['FOX', 'FOx', 'FoX', 'Fox', 'fOX', 'fOx', 'foX', 'fox']
Run Code Online (Sandbox Code Playgroud)

要么

>>> s = 'Fox'
>>> map(''.join, itertools.product(*zip(s.upper(), s.lower())))
Run Code Online (Sandbox Code Playgroud)

  • 很好,但我认为你的内部发电机过于复杂.`zip(c.lower(),c.upper())`会工作吗? (4认同)
  • @Marcin:不,你可能知道,我经常回答Python问题,如果我觉得有必要,我也会添加有用的解释.到目前为止,没有人抱怨.通常人们需要的是必要的工具.通过提供像这个优秀答案中的单线程,人们可以通过检查解决方案的作用来了解如何使用这些工具来实现目标.他们需要做的研究来理解解决方案是一种非常好的学习体验.当然,如果他们不理解某些东西,他们总是可以回来询问解释. (2认同)
  • @Marcin:我不同意.对于像我这样经常回答问题的人来说,这一定很有趣.对于学习新编程语言的人来说,它必须充满乐趣和教育.我觉得探索新的语言结构很有趣,所以我有时候不想破坏这种体验.但这只是我对SO的个人看法和态度,对其他不一样的人我很好.同样,SO是协作的,所以如果你认为有必要,你应该添加一个解释. (2认同)

Lal*_*and 6

我一直想试试这个.

不知道这是否符合您的资格(虽然它确实有效).

str = raw_input()
def getBit(num, bit):
   return (num & 1 << bit) != 0



for i in xrange(0,2**len(str)):
   out = ""
   for bit in xrange(0,len(str)):
      if getBit(i,bit):
         out += str[bit].upper()
      else:
         out += str[bit].lower()

   print out
Run Code Online (Sandbox Code Playgroud)

这个想法是,当你以二进制递增时,你得到1和0的每一个可能的排列.

然后,您只需将此1和0的列表转换为字符串,1表示大写,0表示小写.


ste*_*eha 5

这是 @ephemient 接受的优秀答案,稍作修改。

变化:

  • 小写在大写之前,所以列表以“fox”而不是“FOX”开头(问题的示例序列以“fox”开头)

  • 使用列表理解代替map()(无论哪种方式都可以,真的)

  • 分解生成小写/大写对的代码以使其更清晰

  • 将其封装成一个函数。

代码:

import itertools as it

def cap_permutations(s):
    lu_sequence = ((c.lower(), c.upper()) for c in s)
    return [''.join(x) for x in it.product(*lu_sequence)]
Run Code Online (Sandbox Code Playgroud)