python中的列表是可以嵌套的。將嵌套的list遍歷并輸出是很常見的需求。以下通過兩種方法達到目的
defnested_list(list_raw,result):
foriteminlist_raw:
ifisinstance(item,list):
nested_list(item,result)
else:
result.append(item)
returnresult
defflatten_list(nested):
ifisinstance(nested,list):
forsublistinnested:
foriteminflatten_list(sublist):
yielditem
else:
yieldnested
defmain():
list_raw=["a",["b","c",["d"]]]
result=[]
print"nested_listis:",nested_list(list_raw,result)
print"flatten_listis:",list(flatten_list(list_raw))
main()
讓代碼run起來,輸出為:
nested_listis:['a','b','c','d']
flatten_listis:['a','b','c','d']
nested_list方法采用遞歸的方式,如果item是list類型,繼續(xù)遞歸調(diào)用自身。如果不是,將item加入結(jié)果列表中即可。
flatten_list方法則是采用生成器的方式,本質(zhì)上也是遞歸的思路。
2.兩層嵌套list去重
list里面套了一層list,需要去重,并在生成一個去重的list。請看代碼:
defdup_remove_set(list_raw):
result=set()
forsublistinlist_raw:
item=set(sublist)
result=result.union(item)
returnlist(result)
defmain():
list_dup=[[1,2,3],[1,2,4,5],[5,6,7]]
printdup_remove_set(list_dup)
讓代碼run起來:
[1,2,3,4,5,6,7]
基本思路:將每一個子list轉(zhuǎn)為set,然后求并集,即可。
3.多重嵌套去重
defdup_remove(list_raw,result):
foriteminlist_raw:
ifisinstance(item,list):
dup_remove(item,result)
else:
result.add(item)
returnlist(result)
defmain():
list_raw=["a",["b","c",["d","a","b"]]]
result=set()
print"dup_removeis:",dup_remove(list_raw,result)
讓代碼run起來:
dup_removeis:['a','c','b','d']
基本思路與之前遍歷嵌套list的思路差不多,唯一的區(qū)別就是之前result是一個list,而要去重的話用result是一個set,保證最后的結(jié)果為去重的結(jié)果。
以上內(nèi)容為大家介紹了python培訓之list可以嵌套嗎,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓機構(gòu):千鋒教育。