def myFunction(name):
index = 0
list = self.getList()
index = (x => x.name == name)
return index
我想使用lambda表达式在Python列表中查找元素的索引,就像在C#中一样。是否可以像在C#中那样使用lambda表达式来查找特定元素在Python列表中的索引?如果可以,请提供一个示例。
如果你真的想用lambda,语法是:
lambda param, list: return_value
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]
lambda x:x.name == name
。而他不想要x,他想要列表中x的索引。 - PaulMcG我认为这段代码更接近于您所要求的内容:
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)
返回一系列 (index, item) 对。然后当你找到匹配的项时,返回索引。
也许你可以这样做:
idx = [i for i, a in enumerate(lst) if a.name == name][0]
list
是标准的 Python 列表还是对象? - Shamanu4