{[{
change = true;
name = data1;
},{
change = true;
name = data2;
}]}
该函数传递了一个谓词和一个列表;它返回一个2元组,其0索引是谓词返回True的参数列表中所有值的列表,其1索引是谓词返回False的参数列表中所有值的列表。您可以使用+来连接列表,但不能改变任何列表(例如,没有要追加的调用)。
调用单独的((lambda x:x> = 0),[1,-3,-2,4,0,-1,8])返回
def separate(p : callable, l : [object]) -> ([object],[object]):
z = []
d = []
for item in l:
if p(item):
z + [item]
new_l = l.pop(item)
separate(p,new_l)
else:
d + [item]
new_l = l.pop(item)
separate(p,new_l)
h = tuple((z,d))
return h
但我不确定为什么我的函数会给我一个错误
([1,4,0,8],[-3,-2,-1]).
我得到的错误如下:
'int' object is not iterable
有人能告诉我如何解决它吗?非常感谢。
答案 0 :(得分:2)
你的代码似乎没有决定它是递归地还是迭代地解决它 - 它有两者兼而有之。假设您有意引入了递归,让我们重新思考并简化解决方案:
def separate(predicate: callable, array: [object]) -> ([object], [object]):
positive, negative = list(), list()
if array:
if predicate(array[0]):
positive.append(array[0])
else:
negative.append(array[0])
p, n = separate(predicate, array[1:])
positive += p
negative += n
return positive, negative
示例强>
> python3 -i test.py
>>> separate((lambda x: x >= 0), [1, -3, -2, 4, 0, -1, 8])
([1, 4, 0, 8], [-3, -2, -1])
>>> separate((lambda x: x % 2 == 0), [1, -3, -2, 4, 0, -1, 8])
([-2, 4, 0, 8], [1, -3, -1])
>>>