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

时间:2013-08-02 13:50:14

标签: python performance list

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

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

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

1 个答案:

答案 0 :(得分:5)

要针对一系列值测试成员资格,请使用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]]

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