Я хочу объединить карту и лямбду для подсчета количества элементов в списке, удовлетворяющих заданному условию - PullRequest
0 голосов
/ 07 февраля 2020

Я хотел бы объединить карту и лямбду, чтобы посчитать количество элементов в списке, удовлетворяющих заданному условию. Я попробовал следующий код, но я получил ошибку:

<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).

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

вы можете использовать:

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))

или вы вызываете filter с помощью len встроенных функций:

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

вывод:

10

или вы можете использовать для l oop:

total = 0
for e in x:
    if e > y:
        total += 1
0 голосов
/ 07 февраля 2020

например, используя карту и лямбду.

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))

Обратите внимание, что вы не можете использовать y на своей карте / лямбде, потому что вы не можете перебрать int.

Если вы абсолютно хотите использовать второй параметр, вы должны передать y так, чтобы он был повторяемым:

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

Это работает, но я не думаю, что это хорошая практика .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...