除了我正在尝试使用Python进行Scala类型操作之外,我无法识别任何明显错误的内容。
def powerset(arr):
if len(arr) == 0:
return []
elif len(arr) > 1:
return powerset(arr[1:])+[arr[0]]
我一直都会收到错误:
return powerset(arr [1:])+ [arr [0]]
TypeError:+不支持的操作数类型:'NoneType'和'list'
答案 0 :(得分:4)
if len(arr) == 1
什么都没有回来......
将其更改为
def powerset(arr):
if len(arr)>0:
return powerset(arr[1:])+[arr[0]]
else:
return []
这是来自https://docs.python.org/2/library/itertools.html
的powerset函数def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
这是一个使用稍微不那么神奇的PowerSet实现
def powerset(seq):
"""
Returns all the subsets of this set. This is a generator.
"""
if len(seq) <= 1:
yield seq
yield []
else:
for item in powerset(seq[1:]):
yield [seq[0]]+item
yield item
print list(powerset([1,2]))
答案 1 :(得分:1)
如果arr只有一个元素,那么你就不会返回任何内容。这变为无。你的倒数第二次迭代会爆发,因为powerset()是None。
更改一行:
BODY[<section>]<<partial>>
The text of a particular body section. The section
specification is a set of zero or more part specifiers
delimited by periods...
......变成......
elif len(arr) > 1: