我可以用什么功能"减少"在这段代码?

时间:2016-01-30 00:20:46

标签: python

def factors(numer):    
    return set(reduce(list.__add__, ([i, numer//i] for i in range(1, int(numer**0.5) + 1) if numer % i == 0)))

我试图为价值找到不同的因素组合#nu;"但它给我一个错误说:

NameError: name 'reduce' is not defined

我可以替换什么减少使我的代码工作?

1 个答案:

答案 0 :(得分:1)

您需要在python3中导入它:

from functools import reduce

一旦你这样做就行了:

In [5]: from functools import reduce

In [6]: factors(10)
Out[6]: {1, 2, 5, 10}

您也可以使用itertools.chain展平:

from itertools import chain
def factors(numer):
    return set(chain.from_iterable((i, numer//i) for i in range(1, int(numer**0.5) + 1) if numer % i == 0))

或者通过在每个元组中的元素上添加另一个循环来展平:

def factors(numer):
    return set((j for i in range(1, int(numer**0.5) + 1) if numer % i == 0 for j in (i, numer//i)))