列表理解而不是循环中的扩展

Ash*_*art 3 python list-comprehension one-liner

我可以将这段代码写在一行中吗?我尝试在列表理解中使用链。

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))
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 6

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

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}
Run Code Online (Sandbox Code Playgroud)

如果您确实希望有一个列表,则可以很容易地将集合转换为列表。

list(divisors(15))
# [1, 3, 5, 15]
Run Code Online (Sandbox Code Playgroud)