您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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函数,如上所述,该函数既快又慢。如何更快,更慢?有关详细信息,请参见此处

其他 2022/1/1 18:34:56 有517人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶