【问题标题】:Whats the fastest way of finding the indexes of an item given a list containing it in Python?给定包含在 Python 中的列表,查找项目索引的最快方法是什么?
【发布时间】:2018-08-29 11:25:18
【问题描述】:

我有一个这样的列表,但包含数千甚至数百万个元素:

test = [
  ("goodbye", "help", "buy","sell", "1.1.1.1", 25), 
  ("hi dude", "text", "friends","love", "blablabla", 14), 
  ("hi darling", "books", "letter","class", "club", 64)
]

查找包含单词“hi”的所有元素索引的最优化代码是什么? 在上面给出的示例中,它应该返回 test[1]test[2]

【问题讨论】:

  • 恕我直言,这里没有太多优化空间。如果您一次需要所有索引,可以使用[i for i, x in enumerate(test) if any('hi' in y for y in x)] 之类的列表理解
  • 我不认为它是 stackoverflow.com/questions/176918/… 的副本:index() 方法在这里没有多大帮助。
  • @Maximiliano 让它发挥作用。到目前为止,不要担心这里的表现。老实说,任何现代机器都可以在不到半秒的时间内处理数百万个这样的元素。找到解决方案后,请检查 if 是否存在性能问题。如果存在问题,请分析您的代码,然后寻找替代解决方案。
  • @brandizzi 在不使用 index() 方法的情况下,可能的重复链接中有几个答案。

标签: python list find element


【解决方案1】:

您可以使用enumerateany 来获取包含单词'hi'的所有元素的索引

>>> test = [("goodbye", "help", "buy","sell", "1.1.1.1", 25), ("hi dude", "text", "friends","love", "blablabla", 14), ("hi darling", "books", "letter","class", "club", 64)]
>>> [i for i,words in enumerate(test) if any('hi' in str(word) for word in words)]
[1, 2]

【讨论】:

    【解决方案2】:

    我相信这是最优化的;

    word = "hi"
    matches = []
    for tupl in test:
        for elem in tupl:
            if word in elem:
                matches.append(tupl)
                break
    

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 2016-06-09
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2011-01-05
      • 2015-12-26
      • 2020-08-30
      • 2019-05-28
      相关资源
      最近更新 更多