簡體   English   中英

嘗試使用 for 循環找到 python 中的所有因素的有效方法

[英]Trying to make an efficient way to find all factors in python using for loops

我發現了這個高效的代碼,但因為我是初學者,所以我不太確定語法,所以我嘗試使用 for 循環對其進行轉換。 我的代碼沒有 output。 他們的代碼:

from functools import reduce

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

我的代碼:

factors = []

def factor(n):
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
             factors.append(i)
    for j in factors:
        factor_2 = int(n/j)
        factors.append(factor_2)
    print(factors)

factor(88)

有人可以幫我理解第一個代碼,並可能向我展示 for 循環的樣子。

在您的第二個for循環中,您迭代factors ,同時 append 在每個循環中都有一個值,因此您的列表不斷增長並且您永遠不會到達終點,這使您的循環無限。

有很多方法可以解決這個問題,一種是在第一個循環中成對生成因子。 如果您希望它們按順序排列,您可以在之后對列表進行排序。

def factor(n):
    factors = []
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            factors.append(i)
            factors.append(n//i)
    factors.sort()
    print(factors)

factor(88)
# [1, 2, 4, 8, 11, 22, 44, 88]

請注意,我將factors = []行放在 function 的主體內。 否則,它將是全局的,並且在對 function 的連續調用之間不會被重置。

暫無
暫無

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

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