首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python列表操作,Lambda表达式

Python列表操作,Lambda表达式
EN

Stack Overflow用户
提问于 2011-11-18 14:33:27
回答 3查看 6.3K关注 0票数 4
代码语言:javascript
复制
def myFunction(name):
    index = 0
    list = self.getList()
    index = (x => x.name == name)
    return index

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-18 21:38:38

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

代码语言:javascript
复制
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)返回一系列(索引,项)对。然后,当您找到匹配的项时,返回索引。

票数 3
EN

Stack Overflow用户

发布于 2011-11-18 14:39:57

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

代码语言:javascript
复制
lambda param, list: return_value

例如,这是一个做加法的lamdba:

代码语言:javascript
复制
lambda x, y: x + y

我不确定这怎么能让你的函数更容易写,因为这是最明显的方式:

代码语言:javascript
复制
def myFunction(name):
    for i, x in enumerate(self.getList()):
        if x.name == name:
            return i

你的lamdba应该是这样的:

代码语言:javascript
复制
lamdba x: x.name == name

所以一种可怕的方式是:

代码语言:javascript
复制
def myFunction(name):
    matches = [index
               for index, value in enumerate(self.getList())
               if value.name == name]
    if matches:
        return matches[0]
票数 3
EN

Stack Overflow用户

发布于 2016-06-21 17:08:55

也许你可以这样做:

代码语言:javascript
复制
idx = [i for i, a in enumerate(lst) if a.name == name][0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8178639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档