为什么不这样:
def subsets(x):
if not x:
return [[]]
else:
return [x + y for x in [[], [x[0]]] for y in subsets(x[1:])]
print subsets(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)
产生与此相同的输出:
def subsets(x):
if not x:
return [[]]
else:
z = subsets(x[1:])
return [x + y for x in [[], [x[0]]] for y in z]
print subsets(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)
问题是你使用的名称x是两个不同的东西.当您x在列表推导中引入变量时,它会隐藏x在函数中定义的变量.因此,x列表理解中的最终结果并不是 x指您所希望的.
将其中一个重命名x为其他内容可以解决问题:
def subsets(original_x):
if not original_x:
return [[]]
else:
return [x + y for x in [[], [original_x[0]]]
for y in subsets(original_x[1:])]
Run Code Online (Sandbox Code Playgroud)
我还建议您尝试为变量找到更具描述性的名称.这将减少意外重复使用名称的可能性.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |