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

列表中的优雅查找子列表

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

列表中的优雅查找子列表

我知道这个问题已有5个月了,并且已经“被接受”,但是在谷歌上搜索了一个非常类似的问题,使我想到了这个问题,所有答案似乎都存在两个相当重要的问题,而且我很无聊并且想尝试一下在一个SO答案上,所以我将对发现的结果感到不满意。

就我所知,问题的第一部分非常琐碎:仅返回原始列表,其中所有未过滤掉“模式”中的元素。按照这种想法,我想到的第一个代码使用了filter()函数:

def subfinder(mylist, pattern):    return list(filter(lambda x: x in pattern, mylist))

我要说的是,该解决方案绝对比原始解决方案简洁,但是它没有任何更快,或者至少没有那么明显,如果没有很好的理由,我会尽量避免使用lambda表达式。实际上,我能想到的最佳解决方案包括一个简单的列表理解:

def subfinder(mylist, pattern):    pattern = set(pattern)    return [x for x in mylist if x in pattern]

该解决方案不仅比原始解决方案更优雅,而且速度也大大提高:理解速度比原始解决方案快约120%,同时将图案投射到一组最初的凹凸中,在我的测试中,速度提高了多达320%。

现在获得奖金:我将直接进入其中,我的解决方案如下:

def subfinder(mylist, pattern):    matches = []    for i in range(len(mylist)):        if mylist[i] == pattern[0] and mylist[i:i+len(pattern)] == pattern: matches.append(pattern)    return matches

这是史蒂文·鲁姆巴尔斯基(Steven Rumbalski)“低效的班轮”的一种变体,它增加了“ mylist [i] == pattern
[0]”检查功能,并且由于python的短路评估,因此比原始语句都快得多和itertools版本(据我所知, 还有 其他所有提供的解决方案)
甚至支持重叠模式。所以你去了。



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

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

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