我有两个文件。我正在尝试删除某些列匹配的所有行。我想我应该用Python中的列表来实现这一点。我以为会很快,但速度太慢了。你知道吗
我只想比较前3列,因为后2列不可靠。但是,我想导出最后两列。你知道吗
示例:
A = [
(Jack, Smith, New York, USA, 100),
(Jim, Doe, Cleveland, UK, 200),
(Frank, Johnson, Chicago, USA, 300)
]
B = [
(Jack, Smith, New York, United States, blank),
(Jerry, Smith, Cleveland, USA, blank),
(Frank, Johnson, Chicago, America, blank)
]
Matched List = [
(Jack, Smith, New York, USA, 100)
(Frank, Johnson, Chicago, USA, 300)
]
Desired List = [
(Jim, Doe, Cleveland, UK, 200)
]
所以我编写了两个嵌套For循环来比较两个列表并删除匹配项。但是,我的列表A是~50000行,列表B是600000行。这需要3.5个小时。我需要在一组300000和4000000行上运行它;但是在看到这需要多长时间之后,它将运行几天。你知道吗
下面是两个For循环(我比较了第0、7、9和10列)
for Acquisition_row in Acquisition_list[:]:
for Leads_row in Leads_list:
if (Acquisition_row[0] == Leads_row[0]) and (Acquisition_row[7] == Leads_row[7]) and (Acquisition_row[9] == Leads_row[9]) and (Acquisition_row[10] == Leads_row[10]):
try:
Acquisition_list.remove(Acquisition_row)
Leads_list.append(Acquisition_row)
except:
print("Error!")
有没有办法加快速度?有更好的方法吗?我应该使用不同的编程语言吗?也许可以把这些上传到sqldb中的temp表中,然后使用SQL?你知道吗
谢谢!你知道吗
@kindall建议
set()
或dict
记录您迄今所看到的内容是正确的。你知道吗这样做的好处是:在创建密钥集时,您只需迭代一次Leads\u list(我为此选择Leads\u list,因为它是一个较大的列表,因此将节省您更多的时间);并且查找Acquisition\u list需要固定的时间,O(1)而不是O(n),其中n是len(Leads\u list)。你知道吗
在最初的设置中,最坏的情况是,(n*m)或(300000*4000000)操作,这是。。。一吨。使用
set
s,您将只执行(n+m)或(30000+4000000),这是…少了很多。少了30万倍。这就是1.2万亿和0.000004万亿(400万)之间的差别。你知道吗相关问题 更多 >
编程相关推荐