Есть ли способ написать лямбда-функцию, которая может выбрать только некоторые элементы из массива строк? - PullRequest
0 голосов
/ 18 марта 2020

Например, учитывая массив a = ["one", "two", "three", "four"], я могу напечатать все это с помощью лямбда-функции, подобной этой

print((lambda x:x)(a))

но если бы я хотел вывести только четные индексы, я мог бы решить это, используя что-то вроде этого

print([x for i,x in enumerate(a) if i%2==0])

мой вывод

["one","three"]

но как я могу получить тот же вывод, используя лямбду функция

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Вы можете решить эту проблему с помощью operator.itemgetter.

>>> a = ["one", "two", "three", "four"]
>>> from operator import itemgetter
>>> itemgetter(0, 2)(a)
("one", "three")

itemgetter была одной из функций, введенных, когда лямбда-выражение рассматривалось для удаления из Python 3000 (язык, который был в конечном итоге выпущен как Python 3). Он был предназначен для замены потребности в lambda в выражении, подобном

>>> (lambda x: (x[0], x[2]))(a)
("one", "three")

, и при этом был несколько более эффективным.

0 голосов
/ 18 марта 2020

Попробуйте это:

result = list(filter(lambda x: (x == "one" or x =="three"), my_list))
print(result)

По существу, функция фильтра отфильтровывает все элементы списка, которые возвращают ложное значение в лямбда-выражении, так что вы можете отфильтровать что угодно, заменив вторую часть.

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