[英]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.