Python:解析数组中大表的第一列的最快方法

Python:解析数组中大表的第一列的最快方法,python,arrays,python-2.7,csv,Python,Arrays,Python 2.7,Csv,所以我有两个非常大的表要比较(9列,约3000万行) 第一列包含我的行的标识符,我想知道哪些行只在sam1中 这是我目前正在使用的代码,但需要很长时间。有没有办法加快速度 我已经试着通过将列表转换为集合来加快速度,但是没有太大的区别 编辑:现在它运行得快多了,但现在我必须从输入表中取出整行内容,并将具有独占ID的行写入输出文件。我该如何快速处理这一问题?一些建议: 与其创建一个列表,然后将其转换为一个集合,不如直接使用集合: sam1_identifiers = set() for line

所以我有两个非常大的表要比较(9列,约3000万行)

第一列包含我的行的标识符,我想知道哪些行只在sam1中

这是我目前正在使用的代码,但需要很长时间。有没有办法加快速度

我已经试着通过将列表转换为集合来加快速度,但是没有太大的区别

编辑:现在它运行得快多了,但现在我必须从输入表中取出整行内容,并将具有独占ID的行写入输出文件。我该如何快速处理这一问题?

一些建议:

  • 与其创建一个列表,然后将其转换为一个集合,不如直接使用集合:

    sam1_identifiers = set()
    for line in reader1:
        sam1_identifiers.add(line[0])
    
    这可能更节省内存,因为您只有一个集合,而不是列表和集合。这可能会让它快一点

    还要注意,我已经更改了变量名–list是Python内置函数的名称,因此您不应该将其用于自己的变量

  • 因为您希望查找仅在sam1中的标识符,而不是嵌套的if/for语句,所以只需比较并丢弃在sam1中ID集合中的sam2中找到的任何标识符

    sam2_identifiers = set()
    for line in reader2:
        sam2_identifiers.add(line[0])
    
    print sam1 - sam2
    
    甚至

    sam2_identifiers = set()
    for line in reader2:
        sam1_identifiers.discard(line[0])
    
    print sam1_identifiers
    
    我怀疑这比嵌套循环快

  • 也许我遗漏了一些东西,但是你不看看sam2每一行的每一列吗?仅仅查看
    行[0]
    作为标识符就足够了吗,就像sam1一样


这只是一个顶级想法,快速阅读文件,创建包含每个文件第一行的两个集合。查找(setA-setB)以获取仅存在于setAI中的行。我考虑过这一点,但我不知道如何快速实现它。无论如何,你必须阅读整个文件。使用set而不是list只会让它更快一些。不,你是对的,在那里查看
行[0]
就足够了。请看一下我的问题我添加了一个附加问题。
sam2_identifiers = set()
for line in reader2:
    sam1_identifiers.discard(line[0])

print sam1_identifiers