我正在尝试创建一个循环,我可以使用循环生成字符串。我想要实现的是,我想创建一个从1个字符到最多5个字符的小字符串集合。
所以,从sting 1
开始,我想转到55555
,但这是数字,所以如果我只是添加它们似乎很容易,但是当涉及到字母数字时,它会变得棘手。
这是解释,
我将字母数字字符集合作为字符串s = "123ABC"
,我想要做的是我想要创建所有可能的1个字符串,所以我将1
,{ {1}},2
,3
,A
,B
之后我想再添加一个字符串长度的数字,这样我就可以{{1} },C
,11
等等,直到我得到所有可能的组合,直至12
,13
,CA
,我想得到它最高为CB
。我在循环中感到困惑,因为我可以让它产生一个临时刺痛,但循环内部旋转字符是棘手的,
这是我到目前为止所做的,
CC
任何人都可以向我解释或指向我可以找到解决方案的资源吗?
答案 0 :(得分:2)
您可能想要使用itertools.permutations
功能:
import itertools
chars = '123ABC'
for i in xrange(1, len(chars)+1):
print list(itertools.permutations(chars, i))
编辑: 要获取字符串列表,请尝试以下操作:
import itertools
chars = '123ABC'
strings = []
for i in xrange(1, len(chars)+1):
strings.extend(''.join(x) for x in itertools.permutations(chars, i))
答案 1 :(得分:1)
这是一个嵌套循环。不同的递归深度产生所有可能的组合。
strr = "123ABC"
def prod(items, level):
if level == 0:
yield []
else:
for first in items:
for rest in prod(items, level-1):
yield [first] + rest
for ln in range(1, len(strr)+1):
print("length:", ln)
for s in prod(strr, ln):
print(''.join(s))
它也称为cartesian product,itertools
中有相应的功能。