Python中生成单词

3

假设我们有一个由字符{'0','1'}组成的字母表,希望创建一个长度为n的单词列表,使它们不包含连续两个零。我的实现思路如下:

def words(n):
    if n == 0:
        return ['']
    return [a+b for b in words(n-1) for a in ['0','1'] if a != '0' or b != '0']
< p > < em > words(3) 的输出如下:
['010', '110', '001', '101', '011', '111']
                 ^is the wrong one

你能看出我的错误或者说出我生成器的想法错在哪里吗?


1
n=2 的递归调用中,您最终得到 ['01', '11']。现在对于两个字符串都满足 b != '0',因此您将在左侧(作为 a)连接 01 - Tomerikoo
1个回答

6
你的实现存在问题,一旦 b 的长度超过一个字符,它就无法与 '0' 相等。由于你实际上询问的是 b 的第一个字符,因此Python有一个准备好的字符串方法:str.startswith()
def words(n):                                                                                                                                                                                                
    if n == 0:                                                                                                                                                                                                     
        return ['']                                                                                                                                                                                                
    return [a+b for b in words(n-1) for a in ['0','1'] if a != '0' or not b.startswith('0')]                                                                                                                       

界面被保留,因此您可以执行以下操作,例如:

words(3)  # ['010', '110', '101', '011', '111']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接