嘿,我在代码中遇到了一个新问题。有一次我有一个看起来像这个的列表。 (通常要长得多,但要理解这个问题并不重要)
['-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-']
我希望我没有忘记任何可能性。现在我必须搜索重复项并想要删除它们。在这个例子中没有任何所以我完成了。
答案 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