【问题标题】:Python - How to filter a list by multiples of all elements of a list with a lambda function?Python - 如何使用 lambda 函数通过列表中所有元素的倍数过滤列表?
【发布时间】:2020-02-16 18:02:56
【问题描述】:

我有以下代码:

a = [2, 4]
b = list(range(1,10))
print(list(filter((lambda x: (x % f == 0) for f in a), b)))

我的目标是回来:

[4, 8]

相反,我得到:

TypeError: 'generator' object is not callable

这是因为 4 和 8 之间同时除以 2 和 4。(我试图让我的代码工作,而不是解决具体问题,我知道我可以使用 4 并快速解决它。)谢谢这么多!

【问题讨论】:

  • 因为您使用list 意味着您正在评估创建的filter 对象,所以最好使用列表推导,即[i for i in b if all([i%j==0 for j in a])]

标签: python-3.x lambda filter generator


【解决方案1】:

这行得通:

a = [2, 4]
b = list(range(1,10))
print(list(filter(lambda x: all(x % f == 0 for f in a), b)))

输出:

[4, 8]

问题在于(lambda x: (x % f == 0) for f in a) 是一个生成器,而不是一个函数(或lambda 语句)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2023-03-23
    • 2021-03-21
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2022-01-18
    相关资源
    最近更新 更多