首页 > 解决方案 > 如何将函数应用于列表中的每个元素,然后制作输出列表?

问题描述

我试图通过分解一个数字并将因子添加到 中来获得素因子list1,然后list1使用与之前相同的方法将每个数字分解并添加到list2,因此任何素因子的列表长度都为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))

标签: pythonlistprime-factoring

解决方案


您可以像这样使用列表推导来做到这一点。我稍微修改了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]]

推荐阅读