要弄清楚你到底想要做什么有点困难。我将解释您的问题,然后提供答案。如果这不正确,请修改您的问题或对此答案发表评论。
问题
我有正好三个元素长的序列。这是一个:
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,使其只接受一个参数:要测试的列表。我还添加了and len(x) == 3 以确保序列的长度只有 3 个元素