如何生成<;ul>&书信电报;李>;没有使用python或其他语言递归的树?
输出:如何生成<;ul>&书信电报;李>;没有使用python或其他语言递归的树?,python,tree,Python,Tree,输出: class tree: def __init__(self, name='a', childs=[]): self.name = name self.childs = childs 介绍 子介绍 单元1 可能是这样的: <ul> <li> Introduction <ul> <li>Sub Intro</li> </ul&
class tree:
def __init__(self, name='a', childs=[]):
self.name = name
self.childs = childs
-
介绍
- 子介绍
- 单元1
可能是这样的:
<ul>
<li>
Introduction
<ul>
<li>Sub Intro</li>
</ul>
</li>
<li>Module 1</li>
</ul>
NEW=object()
END=object()
类树:
定义初始化(self,name='a',childs=[]):
self.name=名称
self.childs=childs
定义(自我):
缩进=0
结果=[]
对于我在self.childs:
如果我是新来的:
result.append(“%s\n”“(“”*缩进))
缩进+=1
以利夫一世结束:
缩进-=1
结果.追加(“%s
\n“%”(“”*缩进))
其他:
结果.append(“%s%s \n“(“”*缩进,i))
返回“”。加入(结果)
打印树('test',[NEW',Introduction',NEW',Sub Intro',END',Module 1',END])
要生成嵌套列表而无需递归,只需跟踪嵌套级别,在深入嵌套级别时递增,在向上遍历时递减即可
处理结束标记之类的事情的自然方法是维护一个简单的堆栈(Python列表),并在将相应的开始标记插入输出流时将结束标记推送到堆栈上。然后,当您遍历出任何嵌套级别时,都会弹出这些
你没有说你的输入格式。。。让我们假设它看起来像:
NEW=object()
END=object()
class tree:
def __init__(self, name='a', childs=[]):
self.name = name
self.childs = childs
def __str__(self):
indent=0
result=[]
for i in self.childs:
if i is NEW:
result.append('%s<ul>\n'%(' '*indent))
indent+=1
elif i is END:
indent-=1
result.append('%s</ul>\n'%(' '*indent))
else:
result.append('%s<li>%s</li>\n'%(' '*indent, i))
return ''.join(result)
print tree('test', [NEW, 'Introduction', NEW, 'Sub Intro', END, 'Module 1', END])
= Introduction
== Sub Intro
= Module 1
然后是:
NEW=object()
END=object()
class tree:
def __init__(self, name='a', childs=[]):
self.name = name
self.childs = childs
def __str__(self):
indent=0
result=[]
for i in self.childs:
if i is NEW:
result.append('%s<ul>\n'%(' '*indent))
indent+=1
elif i is END:
indent-=1
result.append('%s</ul>\n'%(' '*indent))
else:
result.append('%s<li>%s</li>\n'%(' '*indent, i))
return ''.join(result)
print tree('test', [NEW, 'Introduction', NEW, 'Sub Intro', END, 'Module 1', END])
= Introduction
== Sub Intro
= Module 1
def pref_txt_to_ul(txt):
嵌套=0
关闭标签=列表()
对于txt中的x:
如果len(x.split())<2:
持续
前缀,内容=x.split(无,1)
nd=len(前缀)##新深度
断言前缀==“=”*nd##第一个“单词”是all=个字符
如果nd>嵌套:
打印“\n”、“嵌套*4”、“嵌套”*(nd-嵌套),##将新的开始标记推入输出
结束标记。附加(“”*(nd-嵌套))35;#推送结束标记以备以后使用
elif nd<嵌套:
对于范围内的x(嵌套-nd):
如果关闭\u标签:
打印“*nesting*4,closing_tags.pop(),##pop closing tags
嵌套=nd
打印“\n”和“*nesting*4”,%s %content,#推出此项目(在新深度)
##完成所有文本后:
关闭\u标记时:
打印结束标记。pop(),#弹出剩余的结束标记
。。。应该做到这一点(尽管相当粗糙)
请注意,我实际上并没有强制执行一个规则,即只应以1的增量增加嵌套级别。在一个步骤中从=到=====的退化输入将生成无关的标记,并将无关的标记推入关闭堆栈
注意:我只回答了一个明确的问题,即如何在没有递归的情况下处理嵌套。从您的示例(使用HTML无序列表标记)可以推断,您的真正目标是生成有效的HTML。在这种情况下,有大量的Python工具比我在本例中所做的任何粗糙的文本挖掘都更适合该任务。在:Python“generate HTML”上进行雅虎或谷歌搜索,将返回数千页关于执行此操作的方法和许多可用工具的页面
(我记得几年前我使用过HTMLgen,我看到它仍然可以作为Debian软件包使用,但它似乎已经从PyPI…Python软件包索引中脱落了。毫无疑问,那里有更新得多的软件包。大多数人似乎使用了模板引擎,例如Genshi或Mako).你有什么特别的原因需要非递归地这样做吗?你的英语很好;然而,你的问题很模糊。你是在问如何使用
树
类来构建一个`- ..
- ..