我想从列表中筛选元素,并使用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之类的东西,但列表很长。
谢谢,
ps我知道我可以这样写:filter(lambda x:sum(x)…,a)但这不是重点,想象一下这些不是数字而是任意元素,我想将它们的值分配给变量名。
当我们有其他可用技术时,使用lambda
withfilter
有点愚蠢。
在这种情况下,我可能会以这种方式(或使用等效的生成器表达式)解决特定问题
>>> 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
。)
当然,您可以在所有版本的Python中使用分配样式解压缩(def f(item): x, y, z = item; return x + y + z
)和索引(lambda item: item[0] + item[1] + item[2]
)。
问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 我有两个清单: 我需要从这些列表中创建一个元组列表,如下所示: 我尝试这样做: 但导致: 即x中每个元素与y中每个元素的元组列表…什么是我想做的正确方法?谢谢… 编辑: 在编辑之前提到的其他两个重复是我的错,我将其缩进另一个for循环中是错误的… 问题答案: 使用内置函数: 在Python 3中: 在Python 2中:
问题内容: 我想做类似的事情: Python的标准库中是否有类似行为? 我知道在这里自己动手很容易,但是我正在寻找一种更标准的方法。 问题答案: 您可以使用filter方法: 或列表理解: 要查找单个元素,可以尝试: 尽管如果没有匹配项将引发异常,因此您可能希望将其包装在try / catch中。方括号()使之成为生成器表达式,而不是列表理解。 就我个人而言,尽管我只是使用常规的过滤器/理解并采用
问题内容: 在Python中,我有一个元素列表和一个索引列表。我有什么办法可以立即检索其中的值作为索引的所有那些项? 例: 问题答案: 我不知道有什么方法可以做。但是您可以使用列表理解:
问题内容: 我开始使用django-tables2(从第一印象中就可以强烈推荐),我问自己如何实现列过滤。我找不到合适的文档,但是我确定它在那里。 问题答案: 答案有点晚了,但是无论如何…我也找不到任何合适的文档来进行列过滤。有很多方法可以做到这一点: 答:手动:我添加了一个包含要过滤的字段的表单,然后在我的视图中执行以下操作: 这很好用,但是不是那么干,因为它在视图中是硬编码的。 B.使用Sin
4.5. 过滤列表 如你所知,Python 具有通过列表解析(第 3.6 节 “映射 list”)将列表映射到其它列表的强大能力。这种能力同过滤机制结合使用,使列表中的有些元素被映射的同时跳过另外一些元素。 过滤列表语法: [mapping-expression for element in source-list if filter-expression] 这是你所知所爱的 列表解析 的扩展。
问题内容: 可以说我有: 我想检索每个内部列表的第一个元素: 无需执行此操作(我当前的hack): 我敢肯定有一个班轮,但我真的不知道我在寻找什么。 问题答案: 只需将您的列表组合更改为: 要么: 或者,如果您要处理“适当的数组”: 和: