我想结合map和lambda来计算列表中满足给定条件的项目数



我想结合map和lambda来计算列表中满足给定条件的项目数。我尝试了以下代码,但出现错误:

<lambda>() missing 1 required positional argument: 'y'

我尝试的代码如下:

x = [3,7,6,4,2,8,3,4,6,3,6,6,4,6,3,3,6,4,7,7,4]
y = 4
z = map(lambda x, y: [i>=y for i in x], (x, y))
print (sum(z))

预期输出为 10(因为列表中的 10 个值大于 4(。

您可以使用:

x = [3,7,6,4,2,8,3,4,6,3,6,6,4,6,3,3,6,4,7,7,4]
y = 4
z = map(lambda a: 1 if a > y else 0, x)
print(sum(z))

或者您使用len内置函数导致filter

len(list(filter(lambda a: a > y, x)))

输出:

10

或者您可以使用 for 循环:

total = 0
for e in x:
if e > y:
total += 1

例如使用map和lambda。

x = [3, 7, 6, 4, 2, 8, 3, 4, 6, 3, 6, 6, 4, 6, 3, 3, 6, 4, 7, 7, 4]
y = 4
z = map(lambda x: (1 if x > y else 0), x)
print(sum(z))

请注意,您不能在 map/lambda 中使用y,因为您无法迭代int

如果你绝对想使用第二个参数,你必须传递y,以便它是可迭代的:

z = map(lambda x, y: (1 if x > y else 0), x, [y] * len(x))
print(sum(z))

它有效,但我认为这不是一个好的做法。

最新更新