如何将函数应用于列表中的每个元素,然后列出输出?

How to apply a function to each element in a list, then make a list of the outputs?

我试图通过对一个数进行因式分解并将因数与 list1 相加,然后使用相同的方法对 list1 中的每个数进行因式分解来获得 素因数 之前的方法并添加到 list2,所以任何质因数的列表长度都是 2(如果数字是平方数,它会打印出平方根两次,但由于它不是质数,没关系)。

我不知道如何将我的 factors() 函数应用到 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 函数稍微修改为 return 列表。

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