【问题标题】:Search in list of string or a big string, which one is faster?在字符串列表或大字符串中搜索,哪个更快?
【发布时间】:2020-05-25 22:44:26
【问题描述】:

试图捕获控制台输出并在其中找到关键字, 哪种方法应该更快? 例如:尝试通过python运行“ls”命令并检查控制台输出中是否存在关键字

第一种方法 有一个字符串列表,然后在每个字符串中搜索

list_output = [ "abc", "def", "xyz"]
for i in list_output:
    if "ab" in i:
        print "found"
        break

请注意:list_output 中的每个项目本身都可能是一个大字符串

第二种方法 有一个大字符串并在大字符串中搜索一个子字符串

string_output = "abcdefxyz"
if "ab" in S:
    print "found"

请注意:string_output 可能是一个很大的字符串

一旦找到第一个匹配项就需要停止搜索,无需搜索整个字符串或进一步列出

【问题讨论】:

  • 我认为第一种方法很好。第二种方法可能会导致内存问题。
  • 您不想使用第二个,因为输入错误,例如efx 当它可能是错误的时候,你可能会被“找到”。
  • 这些“大字符串”有多大?数百万或数十亿字节?你把它们分成什么?如果这是ls 的输出,我不希望它非常小(通常远小于一个MB),为什么不使用pathlib
  • "ls" 只是一个示例命令,它可以是任何 linux 命令。是的,这些命令的输出不应超过 1 MB,我正在拆分 on "\n"
  • 与其将ls 的输出直接传递给python,不如先通过grep 来提取您要查找的术语?它在匹配字符串方面肯定比你用 python 编写的任何东西都要快。

标签: python algorithm optimization compare


【解决方案1】:

根据this 的说法,使用第二种方法比第一种方法快得多,因为第一种方法会即时设置哈希表,并且只是进行线性搜索。

另外(仍然参考上面的链接)如果必须使用序列,setlist 更好

【讨论】:

  • 你读过这个问题吗?您使用一个集合引用一个答案,然后引用一个长字符串的 OP 思想。
  • @GuyCoder 是的,我已经阅读了这个问题。并且该链接有多个答案。查看第二个答案。它关于字符串
  • 这种方法存在将大字符串转换为集合的开销。可以举个例子吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2011-10-10
  • 2012-01-22
  • 2018-01-02
  • 2020-03-12
  • 2015-02-07
相关资源
最近更新 更多