如何使用python或其他语言生成>树而不递归?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用python或其他语言生成>树而不递归?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1954字,纯文字阅读大概需要3分钟。
内容图文
![如何使用python或其他语言生成>树而不递归?](/upload/InfoBanner/zyjiaocheng/769/6220ffff51134c6ba0299cf0745b0204.jpg)
class tree:
def __init__(self, name='a', childs=[]):
self.name = name
self.childs = childs
输出:
<ul>
<li>
Introduction
<ul>
<li>Sub Intro</li>
</ul>
</li>
<li>Module 1</li>
</ul>
解决方法:
要生成没有递归的嵌套列表,您只需跟踪嵌套级别,在遍历更深层次的嵌套时递增它,并在向后移动时递减它.
处理结束标记之类的事情的自然方法是维护一个简单的堆栈(Python列表),并在将相应的开始标记插入输出流时将结束标记推送到它上面.然后,当您遍历任何级别的嵌套时,您都会将它们弹出.
你没有说出你的输入格式…所以让我们假装它看起来像:
= Introduction
== Sub Intro
= Module 1
然后像:
def pref_txt_to_ul(txt):
nesting = 0
closing_tags = list()
for x in txt:
if len(x.split()) < 2:
continue
prefix, content = x.split(None,1)
nd = len(prefix) ## new depth
assert prefix == "=" * nd ## First "word" is all = characters
if nd > nesting:
print "\n", " " * nesting * 4, "<ul>" * (nd - nesting), ## Push new opening tags into output
closing_tags.append('</ul>' * (nd - nesting)) ## push closing tags for later
elif nd < nesting:
for x in range(nesting - nd):
if closing_tags:
print " " * nesting * 4, closing_tags.pop(), ## Pop closing tags
nesting = nd
print "\n", " " * nesting * 4, "<li>%s</li>" % content, # push out this item (at new depth)
## After all text is done:
while closing_tags:
print closing_tags.pop(), # Pop off remaining cloing tags
……应该做的伎俩(虽然相当粗暴).
请注意,我实际上并没有强制执行一个规则,即只应以1为增量增加嵌套级别.在一步中从=到======的简并输入将生成无关标签并将无关标签推入结束堆栈.
注意:我只回答有关如何在没有递归的情况下处理嵌套的明确问题.有人可能会从您的示例(使用HTML无序列表标记)推断出您的真正目标是生成有效的HTML.在这种情况下,有大量的Python工具更适合于那个任务,然后在这个例子中我正在做的任何粗略文本.雅虎或谷歌搜索:Python“生成HTML”将返回数千页关于如何执行此操作的页面以及许多可用的工具.
(我记得几年前我使用过HTMLgen,我发现它仍然可以作为Debian软件包使用,但它似乎已经脱离了PyPI …… Python软件包索引.毫无疑问,最近有更新的软件包.大多数人似乎都使用模板引擎,例如Genshi或Mako.
内容总结
以上是互联网集市为您收集整理的如何使用python或其他语言生成>树而不递归?全部内容,希望文章能够帮你解决如何使用python或其他语言生成>树而不递归?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。