如何在python中创建一个有效的过滤器

gur*_*gui 3 python

我在python中有两个非常大的文件(每个超过1.000.000个条目)有问题:我需要生成一个过滤器,我不知道为什么,我有两个这样的文件:

1,2,3
2,4,5
3,3,4
Run Code Online (Sandbox Code Playgroud)

第二个

1,"fege"
2,"greger"
4,"feffg"
Run Code Online (Sandbox Code Playgroud)

每个文件行的第一项始终是ID.现在我想过滤列表,第一个列表只包含ID在第二个文件中的项目.对于此示例,结果应为:

1,2,3
2,4,5
Run Code Online (Sandbox Code Playgroud)

如何以非常快的方式做到这一点?核心问题是,每个列表都非常长.我用s.th. 像这样:

[row for row in myRows if row[0] == item[0]]
Run Code Online (Sandbox Code Playgroud)

但这需要很长时间才能投掷.(超过30天)

Fre*_*Foo 7

[row for row in myRows if row[0] == item[0]]
Run Code Online (Sandbox Code Playgroud)

正在为每个进行线性扫描item.如果使用set替代,则可以将其降低到预期的恒定时间操作.首先,读入第二个文件以获得set有效的ID:

with open("secondfile") as f:
    # note: only storing the ids, not the whole line
    valid_ids = set(ln.split(',', 1)[0] for ln in f)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用set valid_idsas 过滤第一个文件的行

with open("firstfile") as f:
    matched_rows = [ln for ln in f if ln.split(',')[0] in valid_ids]
Run Code Online (Sandbox Code Playgroud)