python教程—在元组或对象列表上使用Python的list index()方法?-Python实用宝典

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

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

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已经有了这样做的方法,我就不想重新发明轮子。

回答

这个怎么样?

    >>> 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

在评论中有一个很好的关于所有解决方案之间速度差异的讨论。我可能有点偏见但我个人会坚持一行程序速度我们谈论很微不足道和创建函数和导入模块的这个问题,但是如果你打算这样做一个非常大的数量的元素你可能想看看其他的答案,因为它们比我快。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论