比较字符串Python的最快方法

时间:2017-06-07 04:27:44

标签: python string python-3.x comparison string-comparison

情况:将fileA中的字符串与fileB中的预定义字符串进行比较。我的代码中所述函数的示例:

string = open('fileA', 'r')
stringlist = open('fileB', 'r')

//compare the strings
for i in string:
    for j in stringlist:
        if i == j:
            print("Same String found!" + i + " " + j)

问题:在我的实际程序中,string包含超过200个字符串,而stringlist是一个包含超过50,000个字符串的文件。正如我所读到的,嵌套的for循环作为比较函数很慢。

问题:比较两个文件内容的最快方法是什么?

其他信息1:这两个文件都是CSV文件,并在我的程序中以CSV分隔的方式打开。

附加信息2:字符串是md5哈希值(32个字符)。

附加信息3:我对其他存储字符串的方式持开放态度,即即时比较字符串而不是将其保存到fileA。

附加信息4:我也对我可以使用的其他方法或模块持开放态度(即:线程/并行处理) - 速度是关键。

2 个答案:

答案 0 :(得分:3)

如果你没有打印重复项,那么使用set.intersection应该非常快:

list1 = ["hello", "world", "foo"]
list2 = ["foo", "bar", "baz"]

set(list1).intersection(list2)
# {'foo'}

答案 1 :(得分:1)

您应该使用sets

setA = set(listA)
setB = set(listB)
common = setA.intersection(setB)

common现在包含两个列表中的所有字符串

您也可以使用单行代码执行此操作:

common = set(listA).intersection(set(listB))

如果您可以“即时”进行此比较,那么当然比将列表保存到文件然后再从该文件中读取更好更快,这样做就没有任何好处。

当然,要打印重复项:

for x in common:
    print(x)