Python如何浏览保持层次结构的嵌套列表/元组
我有一份这样的清单:Python如何浏览保持层次结构的嵌套列表/元组,python,list,tuples,Python,List,Tuples,我有一份这样的清单: lista = """ <ul> <li>Arts & Entertainment <ul> <li>Celebrities & Entertainment News</li> <li>Comics & Animation <ul> <li>Anime & Manga</li>
lista = """
<ul>
<li>Arts & Entertainment
<ul>
<li>Celebrities & Entertainment News</li>
<li>Comics & Animation
<ul>
<li>Anime & Manga</li>
<li>Cartoons</li>
<li>Comics</li>
</ul>
</li>
</ul>
</li>
</ul>
"""
为了列出保持层次结构的所有元素,我尝试了以下方法:
myLevel = 0
def orderList2(item):
global myLevel
for i in item:
if isinstance(i, str):
print str(myLevel) + " " + str(i.encode("utf-8")) + " tuple <br/>"
elif isinstance(i, tuple):
print str(myLevel) + " " + str(i[0].encode("utf-8")) + " tuple <br/>"
orderList2(item)
但它实际上并不起作用
你有什么建议吗
谢谢。您的助手功能不太正确。尝试:
def orderList2(myLevel, item):
for i in item:
if isinstance(i, str):
print str(myLevel) + " " + str(i.encode("utf-8")) + " tuple <br/>"
elif isinstance(i, tuple):
visit(myLevel + 1, i)
这使您可以处理标记中的任意嵌套深度。请尝试以下操作:
def orderList2(item, level=0):
for i in item:
if isinstance(i, basestring):
print level, i.encode('utf-8'), 'tuple <br />'
elif isinstance(i, tuple):
orderList2(i, level)
else:
orderList2(i, level+1)
以下是数据的输出:
>>> item = [(u'Arts & Entertainment', [u'Celebrities & Entertainment News', (u'Comics & Animation', [u'Anime & Manga', u'Cartoons', u'Comics'])])]
>>> orderList2(item)
0 Arts & Entertainment tuple <br />
1 Celebrities & Entertainment News tuple <br />
1 Comics & Animation tuple <br />
2 Anime & Manga tuple <br />
2 Cartoons tuple <br />
2 Comics tuple <br />
请注意,这不是使用全局级别变量,而是传入当前级别以在递归中使用。另外,在您的版本中,递归调用是orderList2item,而您可能打算用i调用它。与打印元组中的第一项不同,这将只进行具有相同级别的递归调用,并使用列表进行递归调用并增加级别。最后,它不检查isinstancei,str,而是检查basestring,这是必要的,因为数据中的字符串是unicode。好吧,您永远不会更改我的级别…谢谢,它工作得很好,您的解释非常清楚。@silviolor-没问题,您可以单击答案旁边复选标记的轮廓,以便其他人知道您的问题已解决。
def orderList2(item, level=0):
for i in item:
if isinstance(i, basestring):
print level, i.encode('utf-8'), 'tuple <br />'
elif isinstance(i, tuple):
orderList2(i, level)
else:
orderList2(i, level+1)
>>> item = [(u'Arts & Entertainment', [u'Celebrities & Entertainment News', (u'Comics & Animation', [u'Anime & Manga', u'Cartoons', u'Comics'])])]
>>> orderList2(item)
0 Arts & Entertainment tuple <br />
1 Celebrities & Entertainment News tuple <br />
1 Comics & Animation tuple <br />
2 Anime & Manga tuple <br />
2 Cartoons tuple <br />
2 Comics tuple <br />