1

我在函数的输出是一堆嵌套列表时遇到了一些问题。我正在尝试递归地制作因子树,直到最终只有素数因子。

def getPrimeFactorHelper(x):
    r = []
    getPrimeFactor(x,r)
    return r

def getPrimeFactor(x,r):
    x = int(x)
    if is_Prime(x) == True:
        r.append(x)
        return r
    z = getLowestFactors(x)
    r.append(getPrimeFactor(z[0],r))
    r.append(getPrimeFactor(z[1],r))
    return r

好吧,目前它为我提供了我所能想到的正确数字,但它创建的嵌套列表并不是我真正想要的结果。

输出:

(3242) [2, [...], 1621, [...]] [...]

又是同一个列表。

另一个更糟糕的地方:

(48) [2, [...], 2, [...], 2, [...], 2, [...], 3, [...], [...], [...], [...]]

4

2 回答 2

2

问题是getPrimeFactor()返回一个列表,然后您将其附加到您的主列表中,创建您所看到的列表输出列表。

因此,而不是

r.append(getPrimeFactor(z[0],r))

做:

r + getPrimeFactor(z[0],r)

这样,您可以连接列表而不是附加:docs。本教程是对这些功能的一个很好的介绍。

于 2018-05-10T14:52:03.480 回答
0

只是为了好玩,这里是另一种使用 python/numpy 查找素数的方法。你可以做一个非常简单的eratosthenes筛子:

import math
import numpy as np
def sieve_primes(n):

    sieve = np.ones(n/2, dtype=np.bool)  

    i = 3
    while (i**2 < n): 
        if sieve[i/2]:
            sieve[i*i/2 :: i] = False
        i += 2   
    prime_indexes = np.nonzero(sieve)[0][1::]
    primes  = 2 * prime_indexes.astype(np.int32) + 1 
    return primes
于 2018-05-10T15:37:23.170 回答