【发布时间】:2012-12-18 07:16:40
【问题描述】:
我想要做的是递归处理一个列表。我是 python 新手,所以当所有代码都被编写并发送执行时,我遇到了一个奇怪的问题:调用递归函数后列表返回发生了变化。为了测试这一点,我写道:
def recur(n):
n.append(len(n))
print '>',n
if n[-1]<5: recur(n)
print '<',n
并调用函数:
recur([])
结果如下:
> [0]
> [0, 1]
> [0, 1, 2]
> [0, 1, 2, 3]
> [0, 1, 2, 3, 4]
> [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
我期待看到的是
> [0]
> [0, 1]
> [0, 1, 2]
> [0, 1, 2, 3]
> [0, 1, 2, 3, 4]
> [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4]
< [0, 1, 2, 3]
< [0, 1, 2]
< [0, 1]
< [0]
,对于简单的整数变量也是如此:
def recur(n):
n=n+1
print '>',n
if n<5: recur(n)
print '<',n
recur(0)
> 1
> 2
> 3
> 4
> 5
< 5
< 4
< 3
< 2
< 1
我该如何解决这种情况?我理解错了什么?
【问题讨论】:
-
你的问题“python:递归列表处理”不是问题。
-
@PhilFrost,但是“我该如何解决这种情况,我理解错了什么?”是一个问题。
-
@StoryTeller:我不知道你是否在讽刺。我并不是说这是一个坏问题。我是说顶部的大标题不是一个问题。这很重要,因为当有人对他们的列表如何变异感到困惑时,他们不会去搜索“递归列表处理”。他们可能会搜索诸如“为什么每次调用函数时我的列表都会改变?”
-
@PhilFrost,您的批评不明确,似乎不公正。我不认为标题必须被表述为问题,但我同意它应该与问题更密切相关。希望我的编辑有所改进。