我目前有一个利用列表理解的递归单行代码
def f(n):
return 1 if n == 1 else min([2 * f(n - x) + (2 ** x) - 1 for x in range(1, n)])
正如您所看到的,它从使用范围 (1 <= x < n) 中的函数生成的整数列表中返回最小整数,但是我希望此列表理解返回最小元组,如下所示:
def f(n):
return 1 if n == 1 else min([(2 * f(n - x) + (2 ** x) - 1, x) for x in range(1, n)])
因此我可以看到最小值属于哪个 x 值,但是如果我这样做,则会生成以下错误:
builtins.TypeError: can only concatenate tuple (not "int") to tuple
尽管我尝试调试和制作类似的函数(非递归但它们有效),但我无法理解也看不出它在哪里尝试连接 int。 有谁知道为什么会发生这种情况以及如何解决它?
最佳答案
您将一个元组放入列表理解中,但尚未调整其余代码来处理元组。特别是这部分:
return 1 if n == 1
不返回元组,这部分:
2 * f(n - x) + (2 ** x) - 1
尝试使用 f
的返回值进行数学运算,但忘记了返回值是元组而不是数字。
关于python - 递归函数与列表理解中的串联错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21447115/