0

完成以下任务的最佳/最快方法是什么:我有一个需要更新的大文件。我不会将它加载到内存中,而是像这样逐行读取它。

with open(self.f, "rb") as f_in:
        for line in f_in:
            l = line.strip().split(',')

对于每一行,可能存在两种不同的更新场景。也就是说,两个带有更新信息的大列表/元组。对于每一行,我必须检查是否l[0]满足列表一中的条件,如果不检查列表二中的另一个条件。我想知道什么是明智的,因为我可能会遇到性能问题。我的第一个想法是从列表/元组中删除匹配的项目,以便列表随着运行时间变得越来越小。

4

1 回答 1

5

要针对一系列值测试成员资格,请使用 aset而不是列表。

与字典查找一样,集合成员资格测试是 O(1) 操作。便宜,与套装大小无关。

set_one = {'some_value', 'some_other_value', ...}

# ...
if l[0] in set_one:
    # do something.

如果您需要映射值,请使用字典:

dict_one = {'some_value': 'item1', 'some_other_value': 'item2', ...}

# ...
if l[0] in dict_one:
    item = dict_one[l[0]]

这完全取决于您要执行的查找类型;使用正确的数据结构可以使许多不同类型的查找变得非常有效。为文件中的每一行循环遍历大型列表通常不是最佳选择。

于 2013-08-02T13:52:11.263 回答