我希望将l中的每个元素(列表)添加到a中。 当我运行该功能时,它给了我' []'每次。我该如何解决这个问题?
def sim(l):
a = []
if len(l)>0:
a = a.append(l.pop())
l.pop()
return sim(l)
return a
答案 0 :(得分:2)
有些事情是错的:
您不应该使用小写L作为变量名称 - 它看起来像一个
在函数的顶部,您为a
分配一个空列表 - 最终sim
将使用空列表调用,然后a
将被分配一个空列表,条件语句将失败,sim
将返回一个空列表。
在条件语句中,您将list.append()
的返回值分配给a
。返回值为None,因此无论之前是a
,它都会被删除。
在条件声明中你{em} 列表中的pop()
两项
空列表的布尔值为false,因此无需显式检查其长度,
def sim(el, a = None):
if el:
a.append(el.pop())
return sim(el, a)
return a
我被教导要将递归函数的基本案例写成第一个语句:
def sim(el, a = None):
if not el:
return a
a.append(el.pop())
return sim(el, a)
答案 1 :(得分:1)
append()
不会返回任何内容,但会更新现有列表。换句话说,通过尝试分配append()
方法的结果,您在添加项目后将a
设置为空。
答案 2 :(得分:0)
这是一项家庭作业,你需要以某种(过于复杂的方式)做这项工作吗?因为如果没有,你可以在Python中将一个列表添加到另一个列表中,如下所示:
>>> l = [1, 2, 3]
>>> a = []
>>> a.extend(l)
>>> a
[1, 2, 3]
答案 3 :(得分:0)
您的密码:def sim(l):
a = []
每次调用return sim(l)
并且sim(l)
为空时,递归调用函数a=[]
。
试试这个:
def sim(l,a):
if len(l)>0:
a.append(l.pop())
print a
return sim(l,a)
return a