Python的浏览嵌套列表/元组保持层次
我有这样的一个列表:Python的浏览嵌套列表/元组保持层次
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>
"""
穿过美丽的汤被转换在这种元组和列表的混合:
[(u'Arts & Entertainment',
[u'Celebrities & Entertainment News',
(u'Comics & Animation',
[u'Anime & Manga', u'Cartoons', u'Comics'])])]
为了列出所有的元素保持hierarchi我是想这样的事情:
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(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 />
注意,而是采用了全球层面的变量,这只是通过在当前水平,使用递归。此外,在您的版本中,递归调用是orderList2(item)
,当时您可能打算用i
来调用它。而不是打印元组中的第一个项目,而只是进行具有相同级别的递归调用,并且使用列表进行递归调用并递增级别。最后,不是检查isinstance(i, str)
,而是检查basestring
,这是必要的,因为数据中的字符串是unicode。
谢谢,它的作品完美,你的解释非常清楚。 – lorussian 2012-02-15 21:57:27
@silviolor - 没问题,你可以[接受我的回答](http://meta.stackexchange.com/a/5235/155356),点击回答旁边复选标记的大纲,以便其他人知道你的问题是解决。 – 2012-02-15 22:09:21
你的帮手功能并不完全正确。尝试:
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)
打印出字符串,当它击中一个元组,递增级别,并打印出该元组串,直到碰到另一个多元组,等等等等。无需您的OP中的全局变量。
然后调用你的顶层元组,让它去镇:
orderList2(0, item)
这让您在处理您的标记嵌套的任意深度。
那么,你永远不会改变'myLevel' ... – Amber 2012-02-13 22:50:32