嘿,我的代码遇到了一个新问题。有一次我有一个清单,看起来确实像这个。(通常要长得多,但这对于理解问题并不重要)
['-0---11-', '--1--110', '01---100', '1--101-0', '10-1-1-0']
带条的位置可以是0或1。现在我想知道这个列表代表了多少只剩下3条的唯一字符串。在上面的例子中,最后三个字符串已经只有三个条,但是前两个字符串有四个和五个条。
'-0---11-'
因此可以表示'-0--1111','-0--1110','000--11-',....
所以我的想法基本上是先创造所有的可能性,然后寻找独特的可能性,这样我就不会算得太多了。我现在的问题是如何创造所有的可能性?
编辑:另一个更简单的例子也许可以澄清我的问题。假设这个列表看起来像:
['--11', '--10', '010-']
现在我想看看我有多少独特的字符串时,我只有在最大1巴。每个条代表1或0,所以我必须写下所有的可能性。结果将是:
['-111', '-011', '0-11', '1-11', '-010', '-110', '0-10', '1-10', '010-']
我希望我没有忘记任何可能性。现在我必须搜索副本并删除它们。在这个例子中没有这样的例子,所以我就完了。
最佳答案
你可以使用这样的递归解决方案
def possibilities(pattern, ndash=0):
if ndash <= pattern.count('-'):
if not pattern:
yield ''
else:
if pattern[0] == '-' and ndash > 0:
for subpattern in possibilities(pattern[1:], ndash - 1):
yield '-' + subpattern
for subpattern in possibilities(pattern[1:], ndash):
if pattern[0] in '0-':
yield '0' + subpattern
if pattern[0] in '1-':
yield '1' + subpattern
这是一个生成器函数,因此为了从中获取值,需要遍历生成器。
>>> gen = possibilities('1----0', 3)
>>> for s in gen:
... print s
或者你可以把它输入到
list
以获得所有可能性的列表。>>> from pprint import pprint
>>> pprint(list(possibilities('1----0', 3)
['1---00',
'1---10',
'1--0-0',
'1--1-0',
'1-0--0',
'1-1--0',
'10---0',
'11---0']
关于python - 替换字符串列表中的字符并创建所有可能性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40335164/