列出理解而不是循环扩展



我可以在一行中编写此代码吗?我试着在列表理解中使用链式。

def divisors(n):
result = []
for div in range(1, int(sqrt(n)) + 1):
if n % div == 0:
result.extend([div, n / div])
return list(set(result))

集合理解似乎是合适的。还请注意,我使用了//而不是/,因为浮点数与此问题无关。

from math import sqrt
def divisors(n):
return {x for div in range(1, int(sqrt(n)) + 1) 
if not (n % div)
for x in [div, n // div]}
divisors(15)
# {1, 3, 5, 15}

如果你真的想有一个列表,那么把这个集合变成一个列表就足够容易了。

list(divisors(15))
# [1, 3, 5, 15]

你在找这样的东西吗?

from math import sqrt
import itertools
def divisors(n):
return list(set(itertools.chain.from_iterable([[div, n / div] for div in range(1, int(sqrt(n)) + 1) if n % div == 0])))

请参阅链接:list.extend和列表理解

def divisors(n):
return list({i for div in range(1, int((n)**0.5) + 1) for i in [div, n // div] if n % div == 0})

样本输入:

print(divisors(30))

输出

[1, 2, 3, 5, 6, 10, 15, 30]

最新更新