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
我可以替换什么减少使我的代码工作?
答案 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)))