这是我的情况:
我有一个产品名称列表,例如:
BLUEAPPLE, GREENBUTTON20, 400100DUCK20(len = 9000)
和一个官方项目名称列表,例如:
BLUEAPPLE, GREENBUTTON, 100DUCK。(len = 2700)
由于我将模糊字符串匹配应用于产品 - 项目,我想从产品名称中去除不必要的数字 - 但保留在官方项目名称中表示的数字。
我想出了一个解决方案,但问题是它的工作速度非常慢。
def remove_nums(product):
if bool(re.search('\d'), product):
for item in item_nums_list:
if item in product_name:
substrings = [u for x in product_name.split(item) for u in (x, item)][:-1]
no_num_list = [re.sub('(\d+)', '', substring) if substring not in item else substring for substring in substrings]
return ''.join(no_num_list)
return re.sub('(\d+)', '', product)
else:
return product
例子:
product_name = '400100DUCK20'
item = '100DUCK'
substrings = ['400','100DUCK','20']
no_num_list = ['','100OG','']
returns '100DUCK'
这个函数被映射,以便它循环遍历产品列表中的每个产品。
我一直在想办法在这里使用 lambdas、maps、applys 等,但我无法完全理解它。使用直接列表或熊猫完成我想要做的事情的最有效方法是什么?或者,我从 postgres 数据库中获取这些项目和产品列表,所以如果您认为在 psql 中这样做会更快,我会走这条路。
心有法竹
白衣染霜花
相关分类