我试图扫描一个包含100,000,000个字符串的列表(list1),并将其与另一个列表(list2)进行匹配,列表1可以包含多达1000万行,如果list2的内容在list1中,我将在计数器中标记这些值,并将结果存储在第三个列表中,因此我的列表大致如下:
列表1
['My name is ABC and I live in DEF',
'I am trying XYZ method to speed up my LMN problem'
... 100000 rows
]
列表2(长度90k)
['ABC','DEF','XYZ','LMN' ......XXX']
我已经将列表1转换为 Dataframe ,将列表2转换为连接列表(减少了传递次数)。
['ABC|DEF|XYZ...|XXX']
我想要的输出是:
['My name is ABC and I live in DEF',2] ( since I have two matching patterns with list2 )
我试过下面的代码,但是迭代df并给予结果花费了很多时间。你能告诉我如何让这段代码更快吗?我到底做错了什么?
import snowflake.connector
import pandas as pd
import numpy as np
my_list=[]
df_list1 = pd.DataFrame({'cola':cola_val})
for row in tqdm.tqdm(df_product_list.values):
val= row[0]
match_list = re.findall(SKU_LIST,str(val),re.IGNORECASE)
my_list.append(str(val)+'~'+str(len(set(match_list))))
1条答案
按热度按时间zc0qhyus1#
在您的情况下,regexp不是一个很好的选择,因为它的成本相当高,而且交替
(..|..| 90K items)
将导致大量的regex回溯。预先将
lst2
转换为set
对象,并找到每个拆分句子的交集:样本输出:
+
),请使用预编译的正则表达式模式进行拆分,该模式可以使用其他额外的分隔符字符进行扩展: