【问题标题】:Can not return a list from a recursive function无法从递归函数返回列表
【发布时间】:2016-06-23 04:02:11
【问题描述】:

我在使用 Python 返回递归函数的结果时遇到问题。

我的函数需要返回最大范围为list_upper_range 的整数之间可能比较的对列表。

重要的是两个整数每对只配对一次。

在我打印结果并将结果返回到调用函数的位置之前,该函数的行为与预期相同。

def generate_comparisons_list(list_upper_range, iter_start, list_of_cases):
    if iter_start == list_upper_range:
        #print(list_of_cases) here verified condition was met
        return list_of_cases

    for i in range(iter_start+1, list_upper_range):
        this_case = [iter_start, i]
        list_of_cases.append(this_case)

    iter_start += 1
    generate_comparisons_list(list_upper_range, iter_start, list_of_cases)

list_of_cases_a_and_b = generate_comparisons_list(list_upper_range=6, iter_start=1, list_of_cases=[])

print(list_of_cases_a_and_b) #returns None

结果应该返回为

[[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]

我是否误解了 Python 在递归函数中处理列表的方式?

【问题讨论】:

    标签: python python-3.x recursion


    【解决方案1】:

    python 函数不会自动返回最后一条语句(就像 ruby​​ 那样),你必须做一个

    return generate_comparisons_list(list_upper_range, iter_start, list_of_cases)

    在函数结束时。

    看看here 看看它的工作原理。

    【讨论】:

    • 这个成功的传奇!但它不会让我的标记为正确。谢谢
    • 这有点超出了您的问题范围,但这里也是使用 itertools 生成所需内容的更简洁的方法。 [x for x in itertools.product(range(1,6), range(1,6)) if x[0]<x[1]]
    • 是的,这样好多了
    • 你可以更简单:[[x, y] for x in range(1, 5) for y in range(x+1, 6)]
    【解决方案2】:

    您的函数generate_comparisons_list() 旨在返回一个列表,但在递归调用中,返回值被丢弃。你需要返回结果

    return generate_comparisons_list(list_upper_range, iter_start, list_of_cases)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2021-06-11
      相关资源
      最近更新 更多