我需要创建一个过滤列表而无需for循环的函数

时间:2019-01-03 11:10:07

标签: python python-3.x

因此,我的函数需要过滤列表,以便仅在应用函数时不使用任何循环的情况下返回仅返回正值的值的列表。我的代码当前为:

def positive_places(f, xs):
    """takes a function f and list xs and returns
    a list of the values of xs which satisfy
    f>0"""
    y = list(map(f, xs))
    x = filter(lambda i: i > 0, y)
    return x

当前返回该函数所有正输出值的列表,但是我需要原始列表xs中的相应值。

感谢您的任何帮助!

2 个答案:

答案 0 :(得分:5)

使用list comprehension

return [x for x in xs if f(x) > 0]

不使用列表理解:

return filter(lambda x: f(x) > 0, xs)

自从您说它应该返回一个列表:

return list(filter(lambda x: f(x) > 0, xs))

答案 1 :(得分:0)

使用递归可能有两种解决方案,它们不使用循环或理解-它们在内部实现了迭代协议。

方法1:

$post->id

方法2:

lst = list()


def foo(index):
    if index < 0 or index >= len(xs):
        return
    if f(xs[index]) > 0:
        lst.append(xs[index])
        # print xs[index] or do something else with the value
    foo(index + 1)


# call foo with index = 0

这两种方法都会创建一个由所需值组成的新列表。第二种方法使用列表切片,我不确定该列表切片是否在内部实现迭代协议。