嘿,我的代码遇到了一个新问题。有一次我有一个清单,看起来确实像这个。(通常要长得多,但这对于理解问题并不重要)

['-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/

10-08 23:37