如何在Python中有效地循环三个不同的数据集合



实现以下目标的最佳/最快方法是什么:我有一个需要更新的大文件。我不会把它载入记忆,而是像这样一行一行地读。

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

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

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

与字典查找一样,集合成员关系测试也是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]]

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

最新更新