微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中解包元素

如何解决在python中解包元素

看到下面的例子后:

def sum(items):
    head,*tail = items
    return head + sum(tail) if tail else head

不知道能不能改成单独打印头和休止总和,所以改成:

def sum(items):
    head,*tail = items
    return head,sum(tail) if tail else head

然而,当我测试它时,它返回到这些结果:

sum([1,2,3])
(1,(2,(3,3)))

代替

(1,5) 

我做错了什么?

解决方法

那是因为您为每个递归创建了一个带有头尾的元组。您似乎只想在第一次将它们分开,而不是每次都将它们分开。我会创建两个函数,一个用于分隔头部和尾部,一个用于递归:

def sum_items(items):
    head,*tail = items
    return head + sum_items(tail) if tail else head

def split_and_sum(items):
    head,*tail = items
    return head,sum_items(tail) if tail else head

split_and_sum([1,2,3])  # Returns (1,5)

递归的原因是在不同的数据集上一遍又一遍地应用相同的逻辑。但既然你想做两件不同的事情,最好只是拥有不同的功能。

,

它不起作用,因为您使用的是 sum 内置函数,但由于您的函数名为 sum,因此无法访问,因此如果您更改函数名称,它将起作用。

所以尝试改变这一行:

def sum(items):

致:

def func(items):

并在调用函数时,更改:

sum([1,3])

致:

func([1,3])

那么结果将是:

(1,5)
,

您的问题是您将函数命名为 sum,它覆盖了内置的 sum 函数。但是,您显然想在自己的 sum 函数中调用内置的 sum 函数。那行不通。您正在做的是递归调用您自己的函数,而不是调用内置的 sum

只需重命名您的函数,您就会得到您期望的结果:

def my_sum(items):
    head,sum(tail) if tail else head

x = my_sum([1,3])

print(x)

结果:

(1,5)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。