gpt4 book ai didi

python - 从 Python 中的列表列表中过滤元素?

转载 作者:太空狗 更新时间:2023-10-29 20:32:21 24 4
gpt4 key购买 nike

我想从列表的列表中过滤元素,并使用 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) 但这不是重点,假设这些不是数字而是任意元素,我想将它们的值分配给变量名。

最佳答案

当我们有其他可用的技术时,将 lambdafilter 一起使用有点愚蠢。

在这种情况下,我可能会以这种方式(或使用等效的生成器表达式)解决特定问题

>>> 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 接受一个元组并将其三个项目解包为 xyz。 (请注意,您也可以在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com