【问题标题】:What's the fastest way to find if a string is not in a group of strings?查找字符串是否不在一组字符串中的最快方法是什么?
【发布时间】:2021-12-28 16:35:44
【问题描述】:

我有一堆字符串,我需要能够判断我是否已经使用过它们。现在,我将所有字符串添加到名为titles 的主字符串中。然后我用了:

#titles = some string with a bunch of strings in it
#n_title is the the string I want to check if it is in titles
if n_title not in titles:
   #do something
else:
   #do something else

我的问题是,如果标题是字典或数组,或者它们都是相同的运行时间,会更好吗?我相信大多数时候我的n_title 不会出现在标题中,如果这有什么不同的话。

【问题讨论】:

  • A set() 可能是最快的。绝对比list 快​​。 O(1) 与 O(n)。
  • @Mark:如果titles 是一个包含一堆字符串的字符串,那么使用set 将无济于事。
  • @martineau 显然,将“一堆字符串”放在一个集合中,而不是单个字符串。 OP 确实说过“如果标题是字典或数组[它会是相同的运行时]”。
  • 你能举个具体的例子吗?这里有歧义。
  • 更好地测试不同的方法并使用模块time 看看哪种方法在您的情况下最快。

标签: python python-3.x search


【解决方案1】:

使用 set() 而不是 list() 因为集合比列表快得多。 列表中有重复值,但集合中不包含任何重复值,因此较少的数据可以更快地找到。

titles = {'tilte1', 'tilte', 'tilte3'} n_title = 'title4' 如果 n_title 不在标题中: #做一点事 别的: #做点别的事情

【讨论】:

  • 这里不涉及列表。
  • "列表中有重复值,但集合中不包含任何重复值,因此较少的数据可以更快地找到。"这也不是为什么 set 对象更快,顺便说一句
  • Uraiz:供将来参考:您可以使用有限版本的降价来很好地格式化您的问题和答案。 Here's some formatting help.
  • @martineau 感谢分享格式化帮助,下次我会小心的。
猜你喜欢
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2014-01-26
  • 1970-01-01
  • 2013-10-28
  • 2013-09-18
相关资源
最近更新 更多