簡體   English   中英

列表理解而不是循環擴展

[英]List comprehension instead of extend in loop

我可以在一行中編寫此代碼嗎? 我嘗試在列表理解中使用鏈。

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 ,把 set 變成一個 list 很容易。

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))

Output

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM