首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powerset递归列表理解python3

Powerset递归列表理解python3
EN

Stack Overflow用户
提问于 2015-11-05 21:59:49
回答 1查看 1.3K关注 0票数 2

我对Python3很陌生,并且正在尝试执行递归powerset函数。它应该使用列表理解。

我写道:

代码语言:javascript
复制
def powerset(seq):
    if not seq:
       return [[]]
    return powerset(seq[1:]) + [[seq[0]] + n for n in powerset(seq[1:])]

这个函数可以工作,但我得到了反馈,并被告知没有必要调用该函数两次。它对很多计算机都有影响。它应该可以轻松地计算多达20个动力组。那我该怎么办?如果不调用这个函数,我就不能让它工作两次。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-11-05 22:13:19

只需计算一次powerset(seq[1:]),将其存储在一个变量中,然后使用它两次:

代码语言:javascript
复制
def powerset(seq):
    if not seq:
        return [[]]
    ps = powerset(seq[1:])
    return ps + [[seq[0]] + n for n in ps]

与您的不同之处在于,通过这种方式,您使用了两次ps,但只计算了一次。

或者,你可以使用双重列表-理解(如果你喜欢这样的事情.)

代码语言:javascript
复制
def powerset(seq):
    return [x for ps in powerset(seq[1:]) for x in ([seq[0]] + ps, ps)] if seq else [[]]

这里,在列表理解中定义了相同的临时变量ps。但是,请注意,结果将以这种方式呈现出稍微不同的顺序。

我觉得很不清楚。我真的不明白,仅仅把它分配给一个变量怎么能改变它呢?意思是一样的?

你在这里似乎想得太多了,纯粹的数学。在编程中,y = f(x)并不意味着"y与/同义词f(x)",而是“将f(x)的结果赋给y”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33555591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档