如何将列表中的内容从一个函数附加到另一个函数

How to append the content from a list from one function to another

我会向您展示我的代码,然后我会解释我要做什么

import networkx as nx

def primeFactors(n): 
    primelist=[]
    while n % 2 == 0: 
        primelist.append(2) 
        n = n / 2
        
    for i in range(3,int(math.sqrt(n))+1,2): 

        while n % i== 0: 
            primelist.append(i) 
            n = n / i 
    if n > 2: 
        primelist.append(n) 
    print(primelist)

def iterate(num):
    numlist=[]
    for n in range(num):
        if(n >= 2):
            p = primeFactors(n)
            numlist.append(p)
            print(numlist)
            prime=TrialDivision(n)
            if(prime):
                #G.add_node(n)
                G.add_nodes_from(numlist)
    nx.draw(G, with_labels=True, font_weight='bold',node_color='green') 

基本上,我试图绘制一个数字的质因数,比方说从 2 到 20,然后绘制它们。第一个函数是获取所有素数因子并将它们放入素数列表中。我想从迭代函数中得到的是绘制我迭代的所有数字的所有主要因素。但问题是,如果我使用 G.add_node(n),它只会显示 2-20 之间的素数,而不是该范围内所有数字的素因数。当我尝试使用 G.add_nodes_from(numlist) 时,它只打印 [None, None, None, None, None]。如果我遍历 10 个数字,输出是这样的:

[2]
[3]
[2, 2]
[5]
[2, 3.0]
[7]
[2, 2, 2]
[3, 3]
[2, 5.0]
[11]
[2, 2, 3.0]
[13]
[2, 7.0]

我可以将第一个函数中的所有这些列表放在一个列表中并在第二个函数中打印吗?

首先,您得到 None,因为您的 primeFactors 函数 return 是打印函数的结果,即 None(该函数打印正确的值到控制台,但函数的 returned 值是 None)。将其切换为 return(primelist) 以便将结果值实际设置为 iterate function.

中的变量

其次,一旦您 return 获得了正确的值,您应该会从 G.add_nodes_from(numlist) 调用中得到一个错误,因为 numlist 将是一个列表列表。您应该使用 numlist.extend(p) 而不是 numlist.append(p)。第一个将列表 p 添加为 numlist 列表中的另一个元素,而第二个将 p 中的每个元素添加为列表。

我没有你的 TrialDivision 功能,所以我无法通过你的整个代码完全测试这个修改,所以你可能需要重新测试那部分。