Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数接受谓词,列表返回元组_Python_Recursion - Fatal编程技术网

Python 函数接受谓词,列表返回元组

Python 函数接受谓词,列表返回元组,python,recursion,Python,Recursion,函数传递了一个谓词和一个列表;它返回一个2元组,其0索引是谓词返回True的参数列表中所有值的列表,其1索引是谓词返回False的参数列表中所有值的列表。您可以使用+连接列表,但不能改变任何列表(例如,不调用追加) 调用separate((lambda x:x>=0),[1,-3,-2,4,0,-1,8])返回 但是我不确定为什么我的函数会给我一个错误 ([1,4,0,8],[-3,-2,-1]). 我得到的错误如下所示: 'int' object is not iterable 有人能告诉

函数传递了一个谓词和一个列表;它返回一个2元组,其0索引是谓词返回True的参数列表中所有值的列表,其1索引是谓词返回False的参数列表中所有值的列表。您可以使用+连接列表,但不能改变任何列表(例如,不调用追加)

调用separate((lambda x:x>=0),[1,-3,-2,4,0,-1,8])返回

但是我不确定为什么我的函数会给我一个错误

([1,4,0,8],[-3,-2,-1]).
我得到的错误如下所示:

'int' object is not iterable

有人能告诉我怎么修吗?非常感谢。

您的代码似乎没有决定是以递归方式还是以迭代方式解决这个问题——它有两种方式。假设您有意引入递归,让我们重新思考并简化解决方案:

*Error: s = separate(predicate.is_positive,[1, -3, -2, 4, 0, -1, 8]) raised exception TypeError: 'int' object is not iterable
示例

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

您的代码似乎并没有决定是以递归方式还是以迭代方式解决这个问题——它有两种方式。假设您有意引入递归,让我们重新思考并简化解决方案:

*Error: s = separate(predicate.is_positive,[1, -3, -2, 4, 0, -1, 8]) raised exception TypeError: 'int' object is not iterable
示例

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

我只看到一次迭代,在
l
上,因此您似乎在为该参数传递一个整数而不是iterable。另外,
z+[item]
d+[item]
这两行并没有做你认为他们在做的事情。我不知道如何更改它。@zeyuxie不要破坏你自己的帖子!如果您认为不值得留在站点,只需删除它。我只在
l
上看到一次迭代,因此您似乎在为该参数传递整数而不是iterable。另外,
z+[item]
d+[item]
这两行并没有做你认为他们在做的事情。我不知道如何更改它。@zeyuxie不要破坏你自己的帖子!如果你认为不值得留在这个网站,就把它删除。