我对Python3很陌生,并且正在尝试执行递归powerset函数。它应该使用列表理解。
我写道:
def powerset(seq):
if not seq:
return [[]]
return powerset(seq[1:]) + [[seq[0]] + n for n in powerset(seq[1:])]这个函数可以工作,但我得到了反馈,并被告知没有必要调用该函数两次。它对很多计算机都有影响。它应该可以轻松地计算多达20个动力组。那我该怎么办?如果不调用这个函数,我就不能让它工作两次。谢谢。
发布于 2015-11-05 22:13:19
只需计算一次powerset(seq[1:]),将其存储在一个变量中,然后使用它两次:
def powerset(seq):
if not seq:
return [[]]
ps = powerset(seq[1:])
return ps + [[seq[0]] + n for n in ps]与您的不同之处在于,通过这种方式,您使用了两次ps,但只计算了一次。
或者,你可以使用双重列表-理解(如果你喜欢这样的事情.)
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”。
https://stackoverflow.com/questions/33555591
复制相似问题