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

问题描述 投票:2回答:2

我正试图通过分解一个数并将因子加到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))
python list prime-factoring
2个回答
1
投票
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]


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

© www.soinside.com 2019 - 2024. All rights reserved.