按列表划分int并返回值除以

时间:2014-08-27 00:14:41

标签: python pycharm

所以几乎第一组代码创建了一个2到10000000的素数列表。我正在尝试找到25000001的素数因子化。所以我希望它按列表中的每个数字除以25000001并将该数字返回给a列表从大到小。

n = 10000000
primes = list()
multiples = set()
for i in range(2, n+1):
     if i not in multiples:
        primes.append(i)
        multiples.update(range(i*i, n+1, i))

def primeFactors(x, factors):
    factorList = []
    if (x % factors) == 0:
        factorList.append(factors)
    print(factorList)

primeFactors(25000001, primes)

3 个答案:

答案 0 :(得分:3)

您可以使用列表理解:

factorList = [e for e in factors if x % e == 0]

部分

e for e in factors

将“迭代”factors的元素,条件if x % e == 0用于过滤元素。

答案 1 :(得分:1)

如果要根据x检查因子中的每个数字,则需要迭代

for n in factors: # iterate over the list
    if x % n == 0: # check "n" each number in the list
        factorList.append(n) # append n if the if statement is True

[1,2,3,4...] % 3基本上就是你现在正在做的事情,而不是检查每个元素。

你可以通过列表理解来实现同样的目标:

factorList = [n for n in factors if x % n == 0]

for循环和列表理解都是等效的。

以您想要的格式打印出来:

print "{} = {}".format(x," * ".join(map(str,factorList)))

如果您打算打印数字,可以在循环或列表理解中使它们成为字符串:

[str(x) for x in factors if n % x == 0]

print "{} = {}".format(x," * ".join(factorList))   

要使用join,元素必须是字符串,因此我们必须使用str(x)或使用map将每个int转换为字符串。

答案 2 :(得分:0)

你在这里尝试做的事实际上是可行的,而不是列表。如果使用numpy数组,则可以将其放入算术表达式中,并自动在整个数组中广播它们:

>>> import numpy as np
>>> primes = np.array([2, 3, 5, 7, 11])
>>> 18 % primes
array([0, 0, 3, 4, 7])
>>> 18 % primes == 0
array([ True,  True, False, False, False], dtype=bool)
>>> primes[18 % primes == 0]
array([2, 3])

这正是你想要做的,几乎就是你想要的方式 - 它的工作方式与你期望的一样。

这显然更简洁,而且几乎总是更有效率;更重要的是,它通常更具可读性。


如果您想查找重复因素怎么办?好吧,你可以对整个数组进行平方,然后对其进行立方体化,依此类推:

>>> primes[18 % (primes**2) == 0]
array([3])
>>> primes[18 % (primes**3) == 0]
array([])

或者,更有效率的是,您可以将工作限制为仅过滤掉的数组,并以更少的工作量获得相同的结果:

>>> factors = primes[18 % primes == 0]
>>> factors2 = factors[18 % (factors**2) == 0]
>>> factors2
array([3])