亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python3遞歸參數麻煩

Python3遞歸參數麻煩

largeQ 2023-09-05 15:24:29
我很難指出我在遞歸子例程中做錯了什么。慣例是: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 errtestpar=['test','err1','err2', ['suberr1','subb'],'isok' ,'lasterr']print ("Result:",Validate(testpar))預期結果是:err1, err2, suberr1, lasterr,但我得到:err1, err2, suberr1, , lasterr,
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

在第一次檢查中,去掉 中的逗號和空格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, "

對于您的問題,一個可能更Pythonic(或至少更通用)的解決方案可能是編寫一個生成器來遍歷嵌套列表:


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'


查看完整回答
反對 回復 2023-09-05
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號