如何找到数字的因子并将其返回到python中的列表中

时间:2012-11-13 20:48:06

标签: python

这是我现在的代码。我无法让它返回问题的正确结果。

def problem(n):
    myList = [1,n]
    for i in range(1,n):
        result = int(n ** .5) 
        new = n/result 
        i = i + 1 
        myList.append(new) 
    return myList 

4 个答案:

答案 0 :(得分:2)

n的因素是均匀划分为n的所有数字。因此,如果i n,则n % i == 0n的因素。

您需要做的是对从1到{{1}}的每个数字执行此测试,如果该条件为真,则将该数字附加到列表中。

如果您在开始编写此代码时遇到问题,请使用您尝试的内容更新您的问题。

请注意,上述方法并不是查找因子的最有效方法,但在我看来,这只是一个初学程序员的练习,因此需要一种天真的方法。

答案 1 :(得分:2)

您的代码存在一些问题。首先,您不需要增加i,因为for循环已经这样做了。其次,使用一些基本的数学原理,你只需要经过一系列数字,直到你传入的数字的平方根。我将留下第二部分给你玩和试验。

def problem(n):
    myList = []
    for i in range(1, n+1):
        if n % i == 0:
            myList.append(i)

    return myList

对于更高级的方法,您可以尝试列表推导,它们非常强大,但通常对较小的数据集更好。

def problem(n):
    return [x for x in range(1, n+1) if n % x == 0]

答案 2 :(得分:1)

你只需要从1到n ** 0.5 + 1进行迭代,你的因子将是我的全部,并且你不会在途中接受。

例如:因素10:

我们只需要从1到4进行迭代

i = 1 => 10%1 == 0,因此因素:i = 1,10 / i = 10

i = 2 => 10%2 == 0,因此因素:i = 2,10 / i = 5

i = 3 => 10%3!= 0,没有因素

我们不需要再进一步了,答案是1,2,5,10。

def problem(n):
    myList = []
    for i in xrange(1, int(n ** 0.5 + 1)):
        if n % i == 0:
            if (i != n/i):
                myList.append(i)
                myList.append(n / i)
            else:
                myList.append(i)
    return myList 

结果:

>>> problem(10)
[1, 10, 2, 5]
>>> problem(12)
[1, 12, 2, 6, 3, 4]
>>> problem(77)
[1, 77, 7, 11]
>>> problem(4)
[1, 4, 2]
>>> problem(64)
[1, 64, 2, 32, 4, 16, 8]
>>> len(problem(10 ** 12))
169

答案 3 :(得分:0)

使用列表理解:

In [4]: num=120

In [5]: [x for x in range(2,int(num/2)+1) if num%x==0]
Out[5]: [2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60]

In [6]: num=121

In [7]: [x for x in range(2,int(num/2)+1) if num%x==0]
Out[7]: [11]