Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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
Python3递归参数故障_Python_Recursion - Fatal编程技术网

Python3递归参数故障

Python3递归参数故障,python,recursion,Python,Recursion,我很难指出我在递归子例程中做错了什么 例行程序是: def Validate(n): err='' for z in n: if type(z)==list: x=Validate(z) if x!='': err='%s%s, ' % (err,x) else: if 'err' in z: print ('..

我很难指出我在递归子例程中做错了什么

例行程序是:

def Validate(n):
    err=''
    for z in n:
        if type(z)==list:
            x=Validate(z)
            if x!='':
                err='%s%s, ' % (err,x)
        else:
            if 'err' in z:
                print ('...found err:',z)
                err='%s%s, ' % (err,z)
    return err

testpar=['test','err1','err2', ['suberr1','subb'],'isok' ,'lasterr']
print ("Result:",Validate(testpar))
预期结果是:

err1, err2, suberr1, lasterr,
但我得到:

err1, err2, suberr1, , lasterr,

在第一次检查中,去掉
err
中的逗号和空格:

for z in n:
    if type(z)==list:
        x=Validate(z)
        if x!='':
            err='%s%s' % (err,x) # instead of: err='%s%s, ' % (err,x)
# this will print "Result: err1, err2, suberr1, lasterr, "
对于您的问题,一个可能更具python风格(或至少更通用)的解决方案可能是编写一个遍历嵌套列表:

def traverse(o, tree_types=(list, tuple)):
    if isinstance(o, tree_types):
        for value in o:
            for subvalue in traverse(value, tree_types):
                yield subvalue
    else:
        yield o
然后,您可以使用它根据您的条件检查每个元素:

>>> a = [n if 'err' in n else '' for n in traverse(testpar)]
['', 'err1', 'err2', 'suberr1', '', '', 'lasterr']

>>> print(", ".join(filter(len,a))) # remove empty strings, convert list to prettier string
'err1, err2, suberr1, lasterr'

请尝试将第一个“err='%s%s',%(err,x)”替换为err='%s%s'(err,x)mrtexaz,这是正确的解决方案,谢谢