我想从列表的列表中过滤元素,并使用 lambda 迭代每个元素的元素。例如,给定列表:
a = [[1,2,3],[4,5,6]]
假设我只想保留列表总和大于 N 的元素。我试着写:
filter(lambda x, y, z: x + y + z >= N, a)
但是我得到了错误:
<lambda>() takes exactly 3 arguments (1 given)
如何在将每个元素的值分配给 x、y 和 z 时进行迭代?类似于 zip,但适用于任意长的列表。
谢谢,
附注我知道我可以这样写: filter(lambda x: sum(x)..., a) 但这不是重点,假设这些不是数字而是任意元素,我想将它们的值分配给变量名。
最佳答案
当我们有其他可用的技术时,将 lambda
与 filter
一起使用有点愚蠢。
在这种情况下,我可能会以这种方式(或使用等效的生成器表达式)解决特定问题
>>> a = [[1, 2, 3], [4, 5, 6]]
>>> [item for item in a if sum(item) > 10]
[[4, 5, 6]]
或者,如果我需要打开包装,比如
>>> [(x, y, z) for x, y, z in a if (x + y) ** z > 30]
[(4, 5, 6)]
如果我真的需要一个函数,我可以使用参数元组解包(顺便说一下,它在 Python 3.x 中被删除,因为人们不常使用它):lambda (x, y, z ): x + y + z
接受一个元组并将其三个项目解包为 x
、y
和 z
。 (请注意,您也可以在 def
中使用它,即:def f((x, y, z)): return x + y + z
。)
当然,您可以使用赋值样式解包(def f(item): x, y, z = item; return x + y + z
)和索引(lambda item : item[0] + item[1] + item[2]
) 在所有版本的 Python 中。
关于python - 从 Python 中的列表列表中过滤元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655956/