Как использовать лямбду, если еще в map () в списке в python? - PullRequest
1 голос
/ 17 февраля 2020

У меня есть список ['apple', 'banana', 'cherry']

Я хочу запустить на нем карту, которая выберет несколько элементов

l = map(lambda x : x if x == "apple" else pass, ['apple', 'banana', 'cherry'])

кажется, что он должен работать, но дает синтаксическую ошибку

В чем здесь проблема?

Ответы [ 5 ]

2 голосов
/ 17 февраля 2020

вам нужно это:

[x for x in ['apple', 'banana', 'cherry'] if x == "apple"]
2 голосов
/ 17 февраля 2020

Вам, вероятно, нужно filter здесь и использовать lambda x : x == "apple".

Пример:

l = list(filter(lambda x : x == "apple", ['apple', 'banana', 'cherry']))
print(l)
1 голос
/ 17 февраля 2020

В зависимости от размера вашего list может быть лучше использовать generator, чем list понимание, то есть:

l = (x for x in ['apple', 'banana', 'cherry'] if x=='apple')

обычно list понимания приведут к увеличению использования памяти , чем эквивалентные генераторы, хотя для небольших размеров разница может быть незначительной.

1 голос
/ 17 февраля 2020

pass не является значением, поэтому его нельзя использовать в выражении. Вы можете использовать None, но тогда вы получите ['apple', None, None], а не просто ['apple'], поэтому вам нужно отфильтровать None s следующим образом:

l = filter(lambda x: x is not None, map(lambda x : x if x == "apple" else None, ['apple', 'banana', 'cherry']))

Более чистое решение будет использовать списочное понимание:

l = [ x for x in ['apple', 'banana', 'cherry'] if x == 'apple' ]
0 голосов
/ 17 февраля 2020

Вы не можете использовать ключевое слово pass в условных выражениях (троичный оператор)

Подробнее об условных выражениях можно прочитать в PEP308

Так что, если вы хотите использовать встроенную функцию map, вам нужно выбрать значение "else" для троичного оператора, например:

map(lambda x : x if x == "apple" else None, ['apple', 'banana', 'cherry'])

или если вы хотите отфильтровать свой список по строке "apple" «Вы можете использовать предложенное решение @ Rake sh, используя встроенную функцию filter:

list(filter(lambda x : x == "apple", ['apple', 'banana', 'cherry']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...