def myFunction(name):
index = 0
list = self.getList()
index = (x => x.name == name)
return index我想使用lamba表达式在python列表中查找元素的索引,就像在C#中一样。是否可以像在C#中一样使用lambda表达式来查找python列表中特定元素的索引。如果有,请举个例子
发布于 2011-11-18 21:38:38
我认为这段代码更接近您的要求:
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)返回一系列(索引,项)对。然后,当您找到匹配的项时,返回索引。
发布于 2011-11-18 14:39:57
如果你真的想使用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]发布于 2016-06-21 17:08:55
也许你可以这样做:
idx = [i for i, a in enumerate(lst) if a.name == name][0]https://stackoverflow.com/questions/8178639
复制相似问题