def cube_of(valz):
'''Returns the cube of values'''
if len(valz) == 0:
return 0
else:
new_val = [valz[0] ** 3]
return [new_val] + [cube_of(valz[1:])]
所以我正在为演示创建此函数,该演示采用名为valz
的值列表并获取每个值的立方体,然后返回这些立方体的列表。
例如,我们假设输入为[-1,2,-3,4,-5]
- 它应该返回[-1,8,-27,64,-125]
但它会返回[-1, [8, [-27, [64, [-125, 0]]]]]
。
造成额外支架的原因是什么?如果我删除代码中的括号,则它会给出这些多维数据集的总和(这是不正确的),或者它给出了一个错误(关于向int
添加list
)。我试着调试这个,甚至让我的朋友看看,但我们都很难过。
答案 0 :(得分:2)
cube_of(valz[1:])
已经是一个列表。没有必要用括号括起来。
return [new_val] + cube_of(valz[1:])
答案 1 :(得分:1)
您的代码可以简化
使用列表理解:
def cube_of(valz):
return [item**3 for item in valz]
递归方法:
def cube_of(valz):
return [valz[0]**3] + cube_of(valz[1:]) if valz else []
示例运行:
>>> cube_of([-1,2,-3,4,-5])
[-1, 8, -27, 64, -125]
答案 2 :(得分:1)
如果valz
为空,则应返回空列表而不是0
- return []
new_valz
是一个列表,因此您不需要括号。 cube_of
会返回列表,因此您也不需要括号。
def cube_of(valz):
'''Returns the cube of values'''
if len(valz) == 0:
return []
else:
new_val = [valz[0] ** 3]
return new_val + cube_of(valz[1:])
cube_of([-1,2,-3,4,-5])
# [-1,8,-27,64,-125]
cube_of([])
# []
答案 3 :(得分:0)
cube_of(valz)
已经在分支的else
部分返回了列表的初始片段,即[new_val]
。因此,为了使其整体返回值为类型列表,它应该返回所有分支中的列表。
你应该改变这样的功能:
def cube_of(valz):
'''Returns the cube of values'''
if len(valz) == 0:
return []
else:
new_val = [valz[0] ** 3]
return [new_val] + cube_of(valz[1:])
注意,现在,由于if-else的两个分支都返回最终列表的初始段,cube_of
本身现在通过归纳返回一个列表,从而使整个递归调用返回列表类型的值。
但是,如果您正在寻找一种优雅且更具惯用性/ Pythonic的解决方案,那么只需匿名即可。