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

从非唯一项目列表中获得唯一组合,更快?

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

从非唯一项目列表中获得唯一组合,更快?

最初提出的问题是“是否有更好,更快的方法?” 实际上有两个问题:

  • 有没有更快的方法?
  • 有没有更好的办法?

我想缩小对“是否有更快的方法?”这个问题的答案。至:

是否有更快的方法从列表中删除重复项,如下所示:

lstWithUniqueElements =列表(set(lstWithDuplicates))

据我所知,没有更快的方法…

现在,让我们更多地关注问题的第二部分(“还有更好的方法吗?”)。通常很难回答此类问题,但是这里不是这样,因为问题(引用)的作者已经明确指出了更好的方法:

我很想使用一个生成器函数。itertools groups()本身是可迭代的,而不是列表或集合,因此,如果我弄清楚如何产生独特的组合,那会很棒。

所以这里是:

def uniqueCombinations(lstList, comboSize):     from itertools import combinations    lstList.sort()    allCombos = combinations(lstList, comboSize)    setUniqueCombos = set()    for comboCandidate in allCombos:        if comboCandidate in setUniqueCombos: continue        yield comboCandidate        setUniqueCombos.add(comboCandidate)

而已 …


这里可能还有一件事值得一提。如果从中生成组合的列表不仅具有唯一性,而且具有相同值的多个元素在这样的某些特殊情况下不起作用,则由选择问题的方法的作者来获得唯一组合的方法:

set(combinations(['a','a','b','a'], 2)) gives: {('a', 'b'), ('b', 'a'), ('a', 'a')}uniqueCombinations(['a','a','b','a'],2) gives: {('a', 'b'), ('a', 'a')}

在两者之间,在stackoverflow上有一个纯Python函数,如上所述,该函数既快又慢。如何更快,更慢?有关详细信息,请参见此处。



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

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

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