python - 如何让过滤器与带多个参数的 lambda 一起工作?

标签 python

使用 Python 时,我发现很难让 filter() 与 lambda 一起工作,以应对需要传递超过 1 个参数的情况,如下面的代码片段所示:

max_validation = lambda x,y,z: x < y < z
sequence1 = [1,4,8]
filter(max_validation, sequence1)

它引发了以下错误:

TypeError: <lambda>() takes exactly 3 arguments (1 given)

请指出这里做错了什么。

最佳答案

确切地弄清楚您要做什么有点困难。我将解释您的问题,然后提供答案。如果这不正确,请修改您的问题或对此答案发表评论。

问题

我有正好三个元素长的序列。这是一个:

sequence1 = [1, 4, 8]

我想确保第一个元素小于第二个元素,而第二个元素又应该小于第三个元素。为此,我编写了以下函数:

max_validation = lambda x, y, z: x < y < z

如何使用 filter 应用它?使用 filter(max_validation, sequence1) 不起作用。

回答

Filter 将您的函数应用于提供的可迭代对象的每个元素,如果函数返回 True 则选取它,如果函数返回 False 则丢弃它。

在您的例子中,filter 首先查看值 1。它试图将其传递到您的函数中。您的函数需要三个参数,但只提供了一个,因此失败。

您需要进行两项更改。首先,将您的三元素序列放入列表或其他序列中。

sequences = [[1, 4, 8], [2, 3, 9], [3, 2, 3]]
max_validation = lambda x: x[0] < x[1] < x[2] and len(x) == 3

我添加了另外两个序列进行测试。因为 sequences 是列表的列表,所以每个列表都会传递给您的测试函数。即使您只测试一个序列,您也应该使用 [[1, 4, 8]] 以便将要测试的整个序列传递到您的函数中。

我还修改了 max_validation 以便它只接受一个参数:要测试的列表。我还添加了 和 len(x) == 3 以确保序列的长度只有 3 个元素

关于python - 如何让过滤器与带多个参数的 lambda 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4391043/

相关文章:

python - 如何对数据框中的列应用多个条件?

python - 如何使用 python 或 CL 将文件复制到剪贴板,稍后使用 STRG+V 粘贴它?

python - 无法使用 Python xmlrpc 在 aria2 中添加选项?

python - 在 DataFrame 上使用 .apply 时如何打印当前行号

python - IPython 笔记本 : how to display() multiple objects without newline

Python:如何根据一侧的两列和另一列的一列合并两个数据框?

python - 打印变量并在循环中附加文件中的一行

python - 使用 WSGI 和 Python 3 提供静态文件

python - 如何使用 PyGTK 将列表写入文件属性

python - 将 Python 数值表达式转换为 LaTeX