Python列表操作,Lambda Expression

时间:2011-11-18 06:33:27

标签: python lambda

def myFunction(name):
    index = 0
    list = self.getList()
    index = (x => x.name == name)
    return index

我想使用lamba表达式来查找python列表中元素的索引,就像在C#中一样。是否可以像在C#中一样使用lambda表达式来查找python列表中特定元素的索引。如果是这样,请提供一个例子

3 个答案:

答案 0 :(得分:3)

如果你真的想使用lambda,语法为:

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会是这样的:

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]

答案 1 :(得分:3)

我认为此代码更接近您的要求:

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来维护索引值。 enumerate(seq)返回一系列(索引,项)对。然后,当您找到匹配的项目时,返回索引。

答案 2 :(得分:0)

也许你可以这样做:

idx = [i for i, a in enumerate(lst) if a.name == name][0]