我们说我的字符串看起来像" 1000101"
我想迭代所有可能的方式来插入"!"在哪里" 1"是:
1000101
100010!
1000!01
1000!0!
!000101
!00010!
!000!01
!000!0!
可扩展到任何字符串和任意数量的" 1" s
答案 0 :(得分:4)
至于(几乎)总是itertools.product
来救援:
>>> from itertools import product
>>> s = "10000101"
>>> all_poss = product(*(['1', '!'] if c == '1' else [c] for c in s))
>>> for x in all_poss:
... print(''.join(x))
...
10000101
1000010!
10000!01
10000!0!
!0000101
!000010!
!0000!01
!0000!0!
(由于我们在这里使用单字符字符串,我们甚至可以使用
product(*('1!' if c == '1' else c for c in s))
如果我们想要的话。)
答案 1 :(得分:2)
你走了。递归结构是我可以生成s[1:]
的所有子组合,然后对于每个组合,如果!
是s[0]
,我可以在前面1
插入方式插入s[0]
def subcombs(s):
if not s:
return ['']
char = s[0]
res = []
for combo in subcombs(s[1:]):
if char == '1':
res.append('!' + combo)
res.append(char + combo)
return res
print(subcombs('1000101'))
['!000!0!', '1000!0!', '!00010!', '100010!', '!000!01', '1000!01', '!000101', '1000101']
答案 2 :(得分:1)
使用生成器的方法:
def possibilities(s):
if not s:
yield ""
else:
for s_next in possibilities(s[1:]):
yield "".join([s[0], s_next])
if s[0] == '1':
yield "".join(['!', s_next])
print list(possibilities("1000101"))
输出:
['1000101', '!000101', '1000!01', '!000!01', '100010!', '!00010!', '1000!0!', '!000!0!']