2017-11-04 129 views
3
def problem(n): 
    myList = [] 
    for i in range(2, n): 
     if n % i == 0: 
      myList.append(i) 

    return myList 

与此代码我想知道你将如何得到例如12的因素打印出[[6,2],[3,4]]这样的dosnt必须在相同的顺序谢谢。蟒蛇放入列表

+0

更新后按照https://开头stackoverflow.com/help/someone-answers –

回答

1

这应该为你工作:

import math 

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

    return myList 

为了得到因素对,这种划分n通过i,如果i是一个因素,它通过i的对将。

例如:

print(problem(12)) #output: [[2, 6], [3, 4]] 
+0

你能解释一下哪些部分添加了吗?谢谢 –

+0

@joey'int(n/i)'''''''''''''''将''划分出来,然后把答案变成一个整数。 – gommb

+0

那么我的名单中没有的部分呢,那么做什么呢,也不是一个痛苦,还有另一种方式来做到这一点。也可以在没有图书馆的情况下做到这一点 –

1

你几乎是正确的。使用范围,你没有采取数字。只需添加n + 1而不是n。这应该工作。此外,你并没有在名单上争夺这位贱民。我也补充说。

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

    return myList 
+0

做什么([i,int(n/i)]) –

+1

这会导致重复因子 – gommb

+0

但我很担心我和(n/i)做什么 –

1

另一种方式。使用range,并检查循环,如果is_integer

num = 12 
set([tuple(sorted(j)) for j in [[i, int(num/i)] for i in range(2,num) if (num/i).is_integer()]] 
) 
#Output: 
#{(2, 6), (3, 4)} 
0

为了做到分工只有一次:

for i in range(2, int(math.sqrt(n) + 1)): 
    d, m = divmod(n, i) 
    if m == 0: 
     myList.append([i, d]) 

你不会得到重复使用上限sqrt(n)