一个字符串的所有可能的情况下的组合
问题描述:
我想创建一个程序来生成一个字符串在Python中所有可能的大写情况。例如,给定'abcedfghij',我想要一个程序来生成: Abcdefghij ABcdef .. 。 。 aBcdef .. 。 ABCDEFGHIJ一个字符串的所有可能的情况下的组合
等等。我试图找到一个快速的方法来做到这一点,但我不知道从哪里开始。
答
from itertools import product, izip
def Cc(s):
s = s.lower()
for p in product(*[(0,1)]*len(s)):
yield ''.join(c.upper() if t else c for t,c in izip(p,s))
print list(Cc("Dan"))
打印:
['dan', 'daN', 'dAn', 'dAN', 'Dan', 'DaN', 'DAn', 'DAN']
+0
谢谢。这是完美的。我从来没有想过这样做。我正在尝试一种递归方法,并且耗时太长。 – peacey
+4
你可以做到这一点甚至更短:产品(* zip(s.lower(),s.upper())))''返回(''.join(t)。 –
答
import itertools
def comb_gen(iterable):
#Generate all combinations of items in iterable
for r in range(len(iterable)+1):
for i in itertools.combinations(iterable, r):
yield i
def upper_by_index(s, indexes):
#return a string which characters specified in indexes is uppered
return "".join(
i.upper() if index in indexes else i
for index, i in enumerate(s)
)
my_string = "abcd"
for i in comb_gen(range(len(my_string))):
print(upper_by_index(my_string, i))
日期:
abcd Abcd aBcd abCd abcD ABcd AbCd AbcD aBCd aBcD abCD ABCd ABcD AbCD aBCD ABCD
答
类似丹的解决方案,但要简单得多:
>>> import itertools
>>> def cc(s):
... return (''.join(t) for t in itertools.product(*zip(s.lower(), s.upper())))
...
>>> print list(cc('dan'))
['dan', 'daN', 'dAn', 'dAN', 'Dan', 'DaN', 'DAn', 'DAN']
不知道为什么downvotes在这里?明确的问题,即使不是一个明确的理由,许多更琐碎的问题都会被问到,而不是被低估? – agf