Python递归和元组

Python递归和元组,python,recursion,Python,Recursion,我正在努力解决这个递归问题。任何帮助都将不胜感激。 编写一个名为clear的函数,该函数接受一个参数,一个任意长度的元组,并返回一个长度相同的元组,其中每个元素都设置为0 这是我目前的代码: def clear(tup): if len(tup) == 0: return tup else: tup[0] = 0 return clear(tup - tup[0]) + tup[0] 检查任何iterable子元素可能更有意义 i

我正在努力解决这个递归问题。任何帮助都将不胜感激。 编写一个名为clear的函数,该函数接受一个参数,一个任意长度的元组,并返回一个长度相同的元组,其中每个元素都设置为0

这是我目前的代码:

def clear(tup):
    if len(tup) == 0:
        return tup
    else:
        tup[0] = 0
        return clear(tup - tup[0]) + tup[0]
检查任何iterable子元素可能更有意义

if isinstance(e, collections.Iterable)

我想……

这个问题不需要递归就可以解决:

def clear(tup):
    return (0,) * len(tup)
def clear(tup):
    if not tup:
        return ()
    return( (0,) + clear(tup[1:]) )
但是,如果您确实想使用递归执行此操作:

def clear(tup):
    return (0,) * len(tup)
def clear(tup):
    if not tup:
        return ()
    return( (0,) + clear(tup[1:]) )

为了更彻底,您可能需要进行一些类型检查。如前所述,这两个示例都适用于元组、列表、字符串和任何符合切片界面的输入。

欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布代码并准确描述问题之前,我们无法有效地帮助您。因此,您当前的代码有什么问题?我不知道,这就是我问的原因@JoranBeasley此代码不执行;它有多个基本问题。我建议您回到关于元组的课程材料,并尝试使用实际值执行这些语句中的每一个。例如,尝试///tup=(1,2)///tup[0]=0///您将看到问题。要明确的是:这是一个递归问题,因为分配给您的人(或您从中获得它的任何练习)指示您在答案中使用递归?(我这样说是因为通常没有人会对此使用递归。)这确实是递归的…@Joran Beasley,看看靠近结尾的那句话(e)。特别是因为我认为递归是处理任意深度,而不是基于OP的任意长度;我猜他不需要处理嵌套元组:/谢谢!我从未想过创建一个新的元组,但这非常有意义。这对
[1,2,[3,4]]
不起作用,因为我确信预期的输出将是
[0,0,[0,0]]
(即我认为递归是针对列表的深度…而不仅仅是列表中的项目…),问题是接受一个元组并返回一个长度相同的元组。没有提到元组的子元素是什么。我同意OP可能没有正确地说出老师给他的问题陈述,但是从上下文中我们可以推断他们想要它任意深度嵌套(因为这是唯一一个递归有意义的senario)显然我是正确的。。。