我正试图通过分解一个数并将因子加到list1
上,然后使用与之前相同的方法对list1
中的每个数进行分解并加到list2
上来获得素数因子,所以任何素数factor的列表长度为2
(如果该数字是一个平方数,它将打印两次平方根,但是由于它不是质数,所以没有关系)。
我不知道如何将我的factor()函数应用于list1
中的每个元素,并列出我所做的所有分解因子的列表。
import math
list1 = []
list2 = []
def factors(num1):
for x in range(1, int(math.sqrt(num1) + 1)):
if num1 % x == 0:
list2.append(int(x))
list2.append(int(num1/x))
list2.sort()
print("enter a number:")
number = int(input())
for m in range(1, int(math.sqrt(number) + 1)):
if number % m == 0:
list1.append(int(m))
list1.append(int(number/m))
list1.sort()
for y in list1:
factors(y)
print(list2)
所需输出如果输入的是20
((1,1),(1,2),(1,2,2,4)(1,5),(1,2,5,10),(1,2,4,5,10,20))
factors
函数中,您将因子本身附加到list2
,但是要嵌套的因子列表,应创建另一个列表并将其附加到list2
。更改后的代码看起来像这样。import math
list1 = []
list2 = []
def factors(num1):
factor_list = []
for x in range(1, int(math.sqrt(num1) + 1)):
if num1 % x == 0:
factor_list.append(int(x))
factor_list.append(int(num1/x))
factor_list.sort()
list2.append(factor_list)
print("enter a number:")
number = int(input())
for m in range(1, int(math.sqrt(number) + 1)):
if number % m == 0:
list1.append(int(m))
list1.append(int(number/m))
list1.sort()
for y in list1:
factors(y)
print(list2)
而且,由于您已经编写了factors
函数,因此可以使用它来分解输入数字本身,而不必再次编写相同的代码。因此,相同代码的更好版本是:
import math def factors(num1): factor_list = [] for x in range(1, int(math.sqrt(num1) + 1)): if num1 % x == 0: factor_list.append(int(x)) factor_list.append(int(num1/x)) factor_list.sort() return factor_list print("enter a number:") number = int(input()) list1 = factors(number) list2 = [factors(x) for x in list1] print(list2)
跟随注释,如果您只想包含长度为2的元素,则可以使用另一种列表理解方法:
list2 = [x for x in list2 if len(x)==2]
factors
函数以返回列表。import math
def factors(num):
fact = []
for x in range(1, int(math.sqrt(num)+1)):
if num % x == 0:
fact.append(x)
fact.append(int(num/x))
fact.sort()
return fact
print("enter a number:")
number = int(input())
list1 = factors(number)
list2 = [factors(f) for f in list1]
20个结果:
[[1, 1], [1, 2], [1, 2, 2, 4], [1, 5], [1, 2, 5, 10], [1, 2, 4, 5, 10, 20]]