Python:获得两个元组相交的更有效方法?

2024-10-02 22:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在做一个项目,我必须处理它>;10亿条线路。 此文件由4个标记组成,其中包含url,如下所示:

<stackoverflow.com> <stackoverflow.org> <stackoverflow.net> <stackoverflow.biz>

我从一个txt文件中提取行,然后我必须得到1&;3个标签将它们输入到另一个函数中

with open("file.txt", "r") as f:
    for i in f:
        tag1 = i.split("<")[:2][1][:-2]
        tag2 = i.split("<")[:5][3][:-2]

我将这些提取的标记输入一个函数,我将其命名为tupleFunction,该函数返回许多元组,如:

从tag1开始:

('stackoverflow.com/123456','stackoverflow.com',stackoverflow.com') 
('stackoverflow.com/1234567','stackoverflow.com',stackoverflow.com') 
('stackoverflow.com/12345678','stackoverflow.com',stackoverflow.com') 

从tag2开始:

('stackoverflow.com/654321','stackoverflow.com',stackoverflow.com') 
('stackoverflow.com/7654321','stackoverflow.com',stackoverflow.com') 
('stackoverflow.com/123456','stackoverflow.com',stackoverflow.com')

从元组的第一个元素开始,我需要得到两个元组的交集,在本例中:

('stackoverflow.com/123456')

我通过运行以下代码获得此结果并将其附加到文本文件中:

a = [f for f, *_ in tuple1]
b = [f for f, *_ in tuple2]
c = str(set(a).intersection(b))[2:-2]
with open("res.txt", "a") as output:
   output.write(c)

这些代码看起来像:

with open("file.txt", "r") as f:
    for i in f:
        tag1 = i.split("<")[:2][1][:-2]
        tag2 = i.split("<")[:5][3][:-2]

        tuple1 = tupleFunction(tag1)
        tuple2 = tupleFunction(tag2)

        a = [f for f, *_ in tuple1]
        b = [f for f, *_ in tuple2]
        c = str(set(a).intersection(b))[2:-2]
        with open("res.txt", "a") as output:
             output.write(c)

我的问题是:有没有更有效的方法来执行准确的过程?我当前的代码需要一个月才能完成:-(

非常感谢您的帮助


Tags: 函数intxtcomforoutputaswith