Python 使用递归的序列

Python 使用递归的序列,python,recursion,Python,Recursion,我正在尝试写一个函数,它输出所有可能的字符列表的长度组合,并且没有任何重复,比如aa、bb等 我现在站在这个舞台上: def sequences(char_list, n, lst = []): if len(lst) == n: print(lst) else: for i in range(len(char_list)): temp_list = [char_list[j] for j in range(len(char

我正在尝试写一个函数,它输出所有可能的字符列表的长度组合,并且没有任何重复,比如aa、bb等

我现在站在这个舞台上:

def sequences(char_list, n, lst = []):
    if len(lst) == n:
        print(lst)
    else:
        for i in range(len(char_list)):
            temp_list = [char_list[j] for j in range(len(char_list)) if i != j]
            sequences(temp_list, n, lst + [char_list[i]])

print(sequences(["a", "b", "c"], 2))
输出是正确的,但最后没有输出。我真的不知道为什么

['a', 'b']  
['a', 'c']  
['b', 'a']  
['b', 'c']  
['c', 'a']  
['c', 'b']  
None

在输出中获取字符串而不是列表的最佳方法是什么?

每个函数的末尾都有一个隐式的
返回None
。在代码的最后一行,您要求Python打印
sequences
的输出,这是
None
,因为没有指定返回值。

函数
sequences
不返回任何内容(代码中任何地方都没有
return
语句),因此它将自动返回
None
<代码>打印(序列([“a”、“b”、“c”]、2))将执行此功能并打印其返回值,输出

要获取字符串而不是列表,请按如下方式连接列表中的所有字符串:

print(''.join(lst))

问题是,我在最后再次打印了它。

你没有在最后打印
None
,只是REPL通知你没有返回值。你可以使用
itertools
?这个功能已经完成了exists@JohnColeman这不是REPL,而是文件末尾的
print
语句。@SethPeace Good point。我没看到那条线。当然,函数本身不进行打印。将
print(lst)
替换为
return lst
序列(temp\u list,n,lst+[char\u list[i]])
替换为
返回序列(temp\u list,n,lst+[char\u list[i]])