如何最简单地获取给定整数的所有因子对列表?
例如:f(20)
将返回[(1,20), (2,10), (4,5)]
。
def f(value):
factors = []
for i in range(1, int(value**0.5)+1):
if value % i == 0:
factors.append((i, value / i))
return factors
或者使用列表推导式实现相同的功能:
def f(val):
return [(i, val / i) for i in range(1, int(val**0.5)+1) if val % i == 0]
result = [(1, value)] * (value > 0)
来解决这个问题,这可能仍然比执行额外的迭代更快。 - Benjamindef f(n):
factors_list = []
for i in xrange(1, int(n**0.5) + 1):
if n % i == 0:
factors_list.append((i, n/i))
return factors_list
print f(20)
编辑:或者使用列表推导式的一行代码:
def f(n):
return [(i, n / i) for i in xrange(1, int(n**0.5) + 1) if n % i == 0]
print f(36)
def f(n):
return [(i, n / i) for i in xrange(1, int(math.sqrt(math.fabs(n))) + 1) if n % i == 0]
print f(-36)
xrange
来提高速度(但在Python 3中不需要),使用ceil
可以增加代码的清晰度和简洁性。 - Benjamindef f(n):
from itertools import takewhile
if not isinstance(n,int):
raise ValueError("supplied %s type, requires integer input" %(type(n).__name__))
return [(i,n/i) for i in takewhile(lambda x:x*x<n,xrange(1,n)) if (n%i)==0]
(5/2)*2 == 5
。 - JoshAdel