python - (多少)在相互检查 2 个列表时先排序哪个重要?

标签 python list search

我有一个包含 800 个元素的列表,我在大约 50k 个文件中查找每个元素大约 50 行。 (这些是具有非通用名称的 xml 标签 - 搜索很简单,所以我没有使用 Beautiful soup。)

每找到一个元素,800 个元素的列表就会缩短。

遍历文件,

我先检查哪一行是否重要 - 针对所有可能的元素检查每一行(检查“spot”、“rover”、“fido”等行)或检查所有行检查一个元素一次(例如检查文件中的所有行是否为“spot”,然后检查所有行是否为“rover”等...)?

或者这一切在一起效率低下? (这是使用 python。) 我在想:

for line in somefile:
        for element in somelist:
              if re.search(element, line):
                  ....

或:

for element in somelist:
        for line in somefile:
              if re.search(element, line):
                  ....

最佳答案

您通常将较大的数据集保留为按顺序访问的数据集,并将您感兴趣的值保留在内存中或作为较大数据集的索引。所以,是的,这很重要,在您的示例中,您希望多次扫描文件,这要慢很多

让我们举个例子,每个文件都是 50 行,而您有 800 个要查找的“单词”。

for filename in filenames:
    for line in open(filename):
        if any(word in line for word in words):
            pass # do something

由于 words 在内存中且易于扫描,因此它比打开每个文件 800 次要好得多 - 这是一种昂贵的操作。

所以,我想我应该这样说,您应该尝试按顺序扫描“最昂贵”的数据集(可能不是最长的)。

关于python - (多少)在相互检查 2 个列表时先排序哪个重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989519/

相关文章:

python - 如何从 pandas 读取 HDF 表?

python访问列表中的第二个到最后一个元素

python - 如何 + 两个元组列表中的值

javascript - 如何使用输入进行自动完成搜索?

多个属性上的 C# Lambda .Contains()

python - 使 Python turtle 窗口大小与 Canvas 大小相同

python - 在 Pandas 数据框中将月份转换为季度

python - 调用 cross_val_score 时出现 ValueError

list - 如何在 OCaml 中编写列表?

php - 如何从目录和子目录中找到包含在多个文件中的函数?