替换字符串列表中的字符并创建所有可能性

时间:2016-10-31 00:36:14

标签: python

嘿,我在代码中遇到了一个新问题。有一次我有一个看起来像这个的列表。 (通常要长得多,但要理解这个问题并不重要)

['-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 bar时我有多少独特的字符串。每个条形代表1或0,所以我必须记下所有可能性。结果将是:

['-111', '-011', '0-11', '1-11',  '-010', '-110', '0-10', '1-10',   '010-']

我希望我没有忘记任何可能性。现在我必须搜索重复项并想要删除它们。在这个例子中没有任何所以我完成了。

1 个答案:

答案 0 :(得分:1)

您可以使用像这样的递归解决方案

summarize

这是一个生成器函数,所以为了从中获取值,你需要迭代生成器。

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