在python中,在列表中查找列表元素的最快方法是什么?

2024-09-27 07:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

列表与此类似:

[["12", "stuA", "stuB"], ["51", "stuC", "stuD"], ..., ["3234", "moreStuff", "andMore"]]

现在我只需要通过第一个值(例如"332")来定位一个项(getindex)。除了从第一个值开始迭代并与每个值进行比较之外,有没有更好的方法来完成这项工作?在

代码:

^{pr2}$

Tags: 方法代码定位列表stubstudpr2morestuff
3条回答

目前还没有人提到这一点,所以我会-如果您需要快速地根据项目的值查找项目(而且可能不止一次),您应该将使用的数据结构更改为支持所需访问类型的数据结构。列表支持按索引而不是按项值快速访问。如果将信息存储在由列表中第一个元素键控的dict中,则可以通过第一个值很快地找到行:

# Make a dict from the list of lists:
itemLookup = {item[0]: item for item in theList}

itemLookup["51"] # -> ["51", "stuC", "stuD"]

因此,简单的答案是no(尽管如果对列表进行排序,有一种使用二分法的快速方法),较长的答案是如果您想要快速查找,请使用字典。在

如果你能保证你想要的密钥只存在一次,这也可以工作。在

import itertools
itertools.ifilter(lambda x: x[1][0] == "332", enumerate(theList)).next()[0]

如果您修改它以使用generator对象,而不是像我在这里那样立即调用next,那么它将用于多次出现。在

如果可行的话,我建议将数据移动到dict格式(OrderedDict,如果出现的位置很重要),将这些整数作为键(因为您可以保证它们是唯一的),或者可能移动到以整数为索引的pandas数据帧。在

否。如果不迭代,则无法找到它,除非列表已排序。您可以像这样使用^{}和列表理解来改进代码。在

[index for index, item in enumerate(thelist) if item[0] == "332"]

这将给出第一个元素是332的所有元素的索引。在

如果您知道332只出现一次,那么您可以这样做

^{pr2}$

相关问题 更多 >

    热门问题