最初提出的问题是“是否有更好,更快的方法?” 实际上有两个问题:
我想缩小对“是否有更快的方法?”这个问题的答案。至:
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函数,如上所述,该函数既快又慢。如何更快,更慢?有关详细信息,请参见此处。