在Python中以独特的方式合并两个列表

7

我正在解决欧拉计划第5题,使用以下代码:

def findLCM(k):
start=time.time()
primes=[2,3,5,7,11,13,17,19,23]
factors=[]
for factor in range(2,k):
    if factor in primes:
        factors.append(factor)
    else:
        factorization=[]
        while factor!=1:
            for prime in primes:
                lastFactor=prime
                if factor%prime==0:
                    factor/=prime
                    factorization.append(lastFactor)
                    break
        tmpFactors=[]
        for tmpFactor in factorization:
            if tmpFactor not in factors:
                factors.append(tmpFactor)
            else:
                tmpFactors.append(tmpFactor)
                factors.remove(tmpFactor)
        for tmpFactor in tmpFactors:
            factors.append(tmpFactor)
        print factors
product=1
for factor in factors:
    product*=factor
factors.sort()
end=time.time()
fnTime=end-start
return product, fnTime, factors

有没有一种Python函数可以像这个函数一样将因子和分解组合起来?例如,如果factors=[2, 3, 5]和factorization=[2, 2, 3],则组合后的列表应该是[2, 2, 3, 5]。

Project Euler问题5:2520是可以被1到10中的每个数字整除的最小数字,没有余数。什么是可以被1到20中的所有数字均匀地整除的最小正数? - krushers
另外,如果你知道这种两组数的数学术语是什么,请告诉我。 - krushers
1个回答

23

术语为“多重集合的并集”。

在Python中,它使用 collections.Counter 实现:

>>> from collections import Counter
>>> combined = Counter([2, 3, 5]) | Counter([2, 2, 3])
>>> list(combined.elements())
[2, 2, 3, 5]

1
哇,我从不知道Counter支持|运算符(这在哪里记录了?)。非常棒的答案。(+1) - mgilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接