【发布时间】:2019-03-12 15:26:12
【问题描述】:
def subs(l):
if l == []:
return [[]]
x = subs(l[1:])
return x + [[l[0]] + y for y in x]
1) 我正在尝试理解上述代码的工作原理
2)如果l = [1,2,3]在递归结束我们将得到一个空列表列表
3) 在最后的下一次迭代中,我们将得到 x 的结果将是 3
(我想它会进入下一步return)
4) 在这些returns 中,我想它会添加return x + [[l[0]] + y for y in x] 应该返回(3,3)。
5) 完成这些步骤后,答案应该是(3,3)。
根据第二步的最终答案必须是[[],[3,3]]。
但代码打印出不同的答案。
o/p
[], [3]]
谁能解释我的假设哪里出了问题以及return x + [[l[0]] + y for y in x]这些步骤是如何工作的?
【问题讨论】:
-
无法复制。您的代码对我来说非常有效......(假设它应该返回子列表列表)。
-
我认为您在计算 x 的值时出错了。当
l=[3],然后x=[[]]。在第 4 步中,return x + [[l[0]] + y for y in x]的结果将是[[]] + [[3] + []],即[[], [3]] -
代码工作正常,但我无法理解如何?根据我的假设,o/p 应该不同,我无法弄清楚上述代码中的返回值