栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

更快的替代方案

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

更快的替代方案

这应该快得多:

df = pd.Dataframe({'list1': [["a","b"],       ["a","c"],       ["a","d"],       ["b","c"],       ["b","d"],       ["c","d"]]*100})df2 = pd.Dataframe({'list2': [["a","b","c","d"],        ["a","b"],         ["b","c"],        ["c","d"],        ["b","c"]]*100})list2 = df2['list2'].map(set).tolist()df['occurance'] = df['list1'].apply(set).apply(lambda x: len([i for i in list2 if x.issubset(i)]))

使用您的方法:

%timeit for index, row in df.iterrows(): df.at[index, "occurrence"] = df2["list2"].apply(lambda x: all(i in x for i in row['list1'])).sum()

1个循环,每个循环最多3:3.98 s使用我的:

%timeit list2 = df2['list2'].map(set).tolist();df['occurance'] = df['list1'].apply(set).apply(lambda x: len([i for i in list2 if x.issubset(i)]))

10个循环,最好为3:每个循环29.7 ms

请注意,我已将列表的大小增加了100倍。

编辑

这似乎更快:

list2 = df2['list2'].sort_values().tolist()df['occurance'] = df['list1'].apply(lambda x: len(list(next(iter(())) if not all(i in list2 for i in x) else i for i in x)))

和时间:

%timeit list2 =  df2['list2'].sort_values().tolist();df['occurance'] = df['list1'].apply(lambda x: len(list(next(iter(())) if not all(i in list2 for i in x) else i for i in x)))

100个循环,最好为3:每个循环14.8 ms



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号