【问题标题】:Sequence using recursion使用递归序列
【发布时间】:2020-12-03 07:28:52
【问题描述】:

我正在尝试编写一个函数,它可以输出所有可能的字符列表组合,其中包含长度且没有任何重复(如 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,只是REPL通知你没有返回值。
  • 你可以使用itertools吗?这个函数已经存在
  • @JohnColeman 这不是 REPL,而是文件末尾的 print 语句。
  • @SethPeace 好点。我没有看到那条线。当然,函数本身并不进行打印。
  • print(lst) 替换为return lst,将sequences(temp_list, n, lst + [char_list[i]]) 替换为return sequences(temp_list, n, lst + [char_list[i]])

标签: python recursion


【解决方案1】:

函数sequences 不返回任何内容(代码中的任何地方都没有return 语句),因此它会自动返回Noneprint(sequences(["a", "b", "c"], 2))会执行这个函数并打印它的返回值,输出None

要获取字符串而不是列表,请像这样连接列表中的所有字符串:

print(''.join(lst))

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      问题是我在最后又打印了一遍。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-26
        • 2011-02-12
        • 2014-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        相关资源
        最近更新 更多