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

Sha*_*ane 10 python list python-2.7

该列表与此类似:

[["12", "stuA", "stuB"], ["51", "stuC", "stuD"], ..., ["3234", "moreStuff", "andMore"]]
Run Code Online (Sandbox Code Playgroud)

现在我需要仅通过其第一个值(例如"332")来定位项目(获取索引).有没有更好的方法来做到这一点,除了从第一个迭代以与每个值进行比较?

码:

index = 0
for item in thelist:
    if item[0] == "332":
         print index

    index = index + 1
Run Code Online (Sandbox Code Playgroud)

the*_*eye 12

不反复,你不能找到它,除非列出的是已排序.您可以使用enumerate和列表理解来改进您的代码.

[index for index, item in enumerate(thelist) if item[0] == "332"]
Run Code Online (Sandbox Code Playgroud)

这将给出第一个元素所在元素的索引332.

如果您知道332只发生一次,则可以执行此操作

def getIndex():
    for index, item in enumerate(thelist):
       if item[0] == "332":
          return index
Run Code Online (Sandbox Code Playgroud)


bab*_*unk 9

没有人提到这一点,所以我会 - 如果你需要快速找到一个项目的价值(可能不止一次),你应该改变你用来支持你需要的访问类型的数据结构.列表支持按索引快速访问,但不支持按项目值.如果您将信息存储在由列表中的第一个元素键入的dict中,您将能够通过第一个值非常快速地找到行:

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

itemLookup["51"] # -> ["51", "stuC", "stuD"]
Run Code Online (Sandbox Code Playgroud)

所以简单的答案是否定的(尽管如果列表已经排序,有一种使用二分法的快速方法),如果你想快速查找,则更长的答案是使用字典.

  • 我们不是迭代列表来查找元素,而是将列表转换为字典.如果我们要多次搜索项目,这是值得做的.如果你不得不进行100次查找,最好进行1次完整迭代,然后进行100次快速查找,而不是进行100次半迭代(平均). (2认同)