gpt4 book ai didi

python - 有效地找到字符串列表中的所有子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:09 25 4
gpt4 key购买 nike

想象一个大型的 pandas 数据框由

import string
import random
import pandas as pd

n = 10000

def id_generator(chars=string.ascii_uppercase + string.digits, size=6):
return ''.join(random.choice(chars) for _ in range(size))


mfr = [id_generator(size=random.randint(3, 20)) for _ in range(n)]
desc = [id_generator(size=random.randint(3, 50)) +
(' ' + random.choice(mfr) if random.random() > 0.8 else '') for _ in range(n)]

df = pd.DataFrame({'id': range(n), 'mfr': mfr, 'desc': desc}).set_index('id')

产生

                   mfr                                               desc
id
0 XACYXAB 6JYLELA2WUR1MVOS5 1VKF5
1 JOLB082YROZO97PGS5 YWWTUR4A19JKVB5HLBQ9RKVHNJ10J08SQZZHSLG2IB 4MK...
2 88QO DUV566OX9OLSLZJZR9CRWNT
3 DW4S6WTRGWJVE MFE
4 Z2I5VOWK IX5DY8GLSPGD5R8W350DZ6ED8CGN2C20GA

对于每个 mfr 值,我希望找到包含该值作为子字符串的 desc 并返回相应的 id。这可以在 pandas 中完成

df['matches'] = df.mfr.map(lambda x: df.index[df.desc.str.contains(x)].tolist())

给出了想要的结果

                   mfr                                               desc matches
id
0 XACYXAB 6JYLELA2WUR1MVOS5 1VKF5 []
1 JOLB082YROZO97PGS5 YWWTUR4A19JKVB5HLBQ9RKVHNJ10J08SQZZHSLG2IB 4MK... []
2 88QO DUV566OX9OLSLZJZR9CRWNT []
3 DW4S6WTRGWJVE MFE []
4 Z2I5VOWK IX5DY8GLSPGD5R8W350DZ6ED8CGN2C20GA []
5 UPCTNHIF2BOAGOB2WL MB2GCMRLQTYD1YRGBJILQ0CZ3LCR2FYHX []
6 L8K9E3T WW0M73FPD4 []
7 ZQT NWNMFRB1ZTMKUVXZH0BFTSIOC3R84XSPRLJS [532]
8 SPEJJW1JGGSG8B 7NYL32KTN8ZRNYDV2Z NK4T3 []
9 3WWZ46 Z3HVNIBSQVXJG5487YX7EA89SYPHN5M3BJ2 []

问题是我需要一个高性能的算法。提供的一个不能很好地扩展。问题是这个问题是否存在任何好的可扩展算法?作为引用,在 n = 10000 的体面桌面上,最后一次调用需要大约 42 秒。

最佳答案

使用嵌套的列表理解:

n = 1000

d = df['desc'].to_dict()

In [117]: %timeit df['matches1'] = [[k for k, v in d.items() if x in v] for x in df.mfr]
80.8 ms ± 2.81 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [118]: %timeit df['matches'] = df.mfr.map(lambda x: df.index[df.desc.str.contains(x)].tolist())
877 ms ± 27.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于python - 有效地找到字符串列表中的所有子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52309339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com