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

标签 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 个柱时我有多少个独特的字符串。每个条代表一个 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/

相关文章:

c++ - zmq 呼吸机/ worker /水槽范式不适用于/子进程

python - 如何在 Kivy ScrollView 中自动向下滚动?

python - 在代码中没有显式断点的情况下将 ipdb 与 emacs 的 gud 一起使用

python - 使用列表作为行中的值创建 Pandas 数据框

python - 同时使用 Matplotlib Slider 和 key_release_event

python - 为什么 mydict.items().sort() 不起作用?

python - 检查给定整数是否等于 int 数组的两个元素之和的最佳算法是什么?

python - 用于基本视频编辑的最佳 python 工具是什么?

utf-8 文件的 Python 3.5 UnicodeDecodeError(语言为 'ang' ,古英语)

Python Singletons - 你如何在你的测试平台中摆脱(__del__)它们?