在元组或对象列表上使用Python的list index()方法?

发布于 2021-01-29 17:07:40

Python的列表类型具有index()方法,该方法带有一个参数,并返回列表中与该参数匹配的第一项的索引。例如:

>>> some_list = ["apple", "pear", "banana", "grape"]
>>> some_list.index("pear")
1
>>> some_list.index("grape")
3

是否有一种优美的(惯用的)方式将其扩展到诸如元组之类的复杂对象列表?理想情况下,我希望能够执行以下操作:

>>> tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", 3), ("plum", 11)]
>>> some_list.getIndexOfTuple(1, 7)
1
>>> some_list.getIndexOfTuple(0, "kumquat")
2

getIndexOfTuple()只是一个假设的方法,该方法接受子索引和一个值,然后返回在该子索引处具有给定值的列表项的索引。我希望

是否有某种方法可以使用列表理解或lambas或类似的“内联”方法来达到一般效果?我想我可以编写自己的类和方法,但是如果Python已经有办法做到这一点,我就不想重新发明轮子。

关注者
0
被浏览
243
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这个怎么样?

    >>> tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", 3), ("plum", 11)]
    >>> [x for x, y in enumerate(tuple_list) if y[1] == 7]
    [1]
    >>> [x for x, y in enumerate(tuple_list) if y[0] == 'kumquat']
    [2]
    

    正如评论中指出的那样,这将获得所有匹配项。要获得第一个,您可以执行以下操作:

    >>> [y[0] for y in tuple_list].index('kumquat')
    2
    

    评论中对所有发布的解决方案之间的速度差异进行了很好的讨论。我可能有一点偏见,但我个人会坚持一言以蔽之,因为相对于创建函数和导入模块来解决这个问题,我们谈论的速度是微不足道的,但是如果您打算大量这样做您可能希望查看提供的其他答案,因为它们比我提供的要快。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看