我对Python的速度有一些疑问。我有两个包含数据的列表,看起来像这样:
GCA_NUMBER.VERSION name sth_else etc. (FILE A - 170k lines)
GCF_NUMBER.VERSION name sth_else etc. (FILE B - 450k lines)
目标是消除文件A中出现在文件B中的重复项,例如:
GCA_0000025.1
GCF_0000025.5
我只关心带有NUMBER的零件,但不能丢失其他信息,例如姓名。
我尝试了两种方法:
for i in FILE_A:
for j in FILE_B:
if i[0] == j[0]:then sth
大约花了17分钟 第二:
tmp_lst = [i[0] for i in FILE_B]
for i in FILE_A:
if i not in tmp_lst: then sth
大约花了13分钟。 有没有更快的方法?
答案 0 :(得分:1)
这里有几个不错的选择:How can I compare two lists in Python and return matches,可以对其进行调整以实现您的目标。
Joshmaker的答案涉及较大数据集的一些选项的性能。
我使用的一种解决方案是将文件读取为pandas数据帧,并在删除重复项时使用外部联接。对于约2-10k行的数据集,这是相当有效的。
def compareFile(newDataframe,oldDataframe):
combinedDataframe = pd.concat([newDataframe,oldDataframe],sort=True,axis=0,ignore_index=True, join="outer").drop_duplicates(subset=["Date","Facility","Measure","Procedure"]).reset_index()
return combinedDataframe