我具有嵌套函数,这些函数旨在对列表列表的索引进行分区,这些列表对应于相同的元素(列表)。
我的第一次尝试不是从内部函数返回所需的列表。我认为这是因为仅在函数内部创建了输出列表。所以我修改了脚本。现在,我从外部定义我的输出列表,如titissuesets。它传递给内部函数并由内部函数修改。但是,正确修改的列表并未从ind_list_renew函数传递给find_like_tissues_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)
答案 0 :(得分:1)
确实,您不需要全局liketissuesets
。您可以像这样重组代码:
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)