Операции со списком Python, лямбда-выражение - PullRequest
4 голосов
/ 18 ноября 2011
def myFunction(name):
    index = 0
    list = self.getList()
    index = (x => x.name == name)
    return index

Я хочу использовать выражение lamba, чтобы найти индекс элемента в списке python, как в C #.Можно ли использовать лямбда-выражения так же, как в C #, чтобы найти индекс определенного элемента в списке Python.Если да, приведите пример

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

Я думаю, что этот код ближе к тому, что вы просите:

def indexMatching(seq, condition):
    for i,x in enumerate(seq):
        if condition(x):
            return i
    return -1

class Z(object):
    def __init__(self, name):
        self.name = name

class X(object):
    def __init__(self, zs):
        self.mylist = list(zs)

    def indexByName(self, name):
        return indexMatching(self.mylist, lambda x: x.name==name)

x = X([Z('Fred'), Z('Barney'), Z('Wilma'), Z('Betty')])

print x.indexByName('Wilma')

Возвращает 2.

Ключевой идеей является использование перечисления для поддержания значения индекса при выполнении итерации по последовательности. enumerate(seq) возвращает серию пар (индекс, элемент). Затем, когда вы найдете соответствующий элемент, верните индекс.

3 голосов
/ 18 ноября 2011

Если вы действительно хотите использовать лямбду, синтаксис:

lambda param, list: return_value

Например, это lamdba, которая делает сложение:

lambda x, y: x + y

Я не уверен, как это могло бы облегчить написание вашей функции, поскольку это наиболее очевидный способ:

def myFunction(name):
    for i, x in enumerate(self.getList()):
        if x.name == name:
            return i

Ваша ламдба была бы такой:

lamdba x: x.name == name

Итак, один ужасный способ сделать это:

def myFunction(name):
    matches = [index
               for index, value in enumerate(self.getList())
               if value.name == name]
    if matches:
        return matches[0]
0 голосов
/ 21 июня 2016

Возможно, вы можете сделать:

idx = [i for i, a in enumerate(lst) if a.name == name][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...