Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数不返回外部定义的变量_Python_Function_Variables - Fatal编程技术网

Python 函数不返回外部定义的变量

Python 函数不返回外部定义的变量,python,function,variables,Python,Function,Variables,我有一些嵌套函数,用于对列表列表的索引进行分区,对应于相同的元素(列表) 我的第一次尝试并没有从内部函数返回我需要的列表。我认为这是因为输出列表只是在函数内部创建的。所以我修改了剧本。现在我定义了我的输出列表,比如说,exernally。它被传递给内部函数并由内部函数修改。然而,正确修改的列表并没有从函数ind\u list\u renew传递到函数find\u like\u set #!/usr/bin/env python import numpy as np l1 = [1,2,3]

我有一些嵌套函数,用于对列表列表的索引进行分区,对应于相同的元素(列表)

我的第一次尝试并没有从内部函数返回我需要的列表。我认为这是因为输出列表只是在函数内部创建的。所以我修改了剧本。现在我定义了我的输出列表,比如说,exernally。它被传递给内部函数并由内部函数修改。然而,正确修改的列表并没有从函数ind\u list\u renew传递到函数find\u like\u set

#!/usr/bin/env python

import numpy as np

l1 = [1,2,3]

l2=[2,3]

l3=[1,2,3]

l4=[2,3,4]

l5=[2,3]

mylist = [l1,l2,l3,l4,l5]
liketissuesets = []

def listidentity(v,b,f):
    if len(v) != len(b):
        return []
    else:
        for j in range(len(b)):
            if v[j]!=b[j]:
                return []
            else:
                return [f]


def ind_list_renew(changinglist, liketissuesets):
    a=changinglist[0]
    b=mylist[a]
    common = []

    for f,v in enumerate(mylist):
        common = common + listidentity(v,b,f)

    print(common)
    liketissuesets = liketissuesets + [common]
    print(liketissuesets)
    changinglist = changinglist.tolist()
    indtodelete = [j for j,k in enumerate(changinglist) if k in common]
    changinglist = np.delete(changinglist, indtodelete)

    if len(changinglist) != 0:
        ind_list_renew(changinglist, liketissuesets)
    else:
        print('yay', liketissuesets)
        return liketissuesets


def find_like_tissues_set(mylist, liketissuesets):

    indoriginal = np.arange(len(mylist))
    c=ind_list_renew(indoriginal, liketissuesets)
    print(c)
    return c

b=find_like_tissues_set(mylist, liketissuesets)

print(b)

实际上,您不需要全局的
类问题集
。您可以按如下方式重新构造代码:

def ind_list_renew(changinglist, liketissuesets):
    # stuff omitted

    if len(changinglist) != 0:
        return ind_list_renew(changinglist, liketissuesets)
    else:
        print('yay', liketissuesets)
        return liketissuesets


def find_like_tissues_set(mylist):
    indoriginal = np.arange(len(mylist))
    c = ind_list_renew(indoriginal, [])
    print(c)
    return c

b = find_like_tissues_set(mylist)

print(b)

您的递归调用应该是:
return ind\u list\u renew(changinglist,liketissuets)
@quamranaI已经更改了一个函数来定义find\u like\u tissues\u set(mylist,liketissuets):return ind\u list\u renew(np.arange(len(mylist)),liketissues),但我仍然没有得到任何返回!这不是递归调用。见下面我的答案。