我有一个元组列表,例如
>>> l = [ ("a",1),("b",2),("c",3) ]
我可以假设元素是独一无二的.现在我想获得该元组的第一个元素,其第二个元素是2(在这个例子中是’b’).首次尝试是:
>>> [ x for x,y in l if y == 2 ][0] 'b'
这看起来有些麻烦,因为这会创建第二个列表,仅用于索引第0个元素.另一种方法是反转给定列表中的所有元组l并构建一个字典,然后索引该字典:
>>> dict([ (y,x) for x,y in l ])[2] 'b'
考虑到反转列表和创建字典所涉及的数据混乱量,这似乎更加尴尬.最后,最简单但也许最快的方法是简单地迭代列表:
>>> def get(l) : ... for x,y in l : ... if y == 2 : ... return x ... assert not "Should not happen." ... >>> get(l) 'b'
我的问题是:有没有更好,更pythonic的方式来搜索这个列表?
解决方法
试试这个:
next(x for x in l if x[1] == 2)[0]
使用next()的优点是我们只迭代查找我们正在寻找的内容所需的最少量元素,所以不,它不等于使用列表推导创建一个全新的列表然后返回第一个元素.