我有一个名为令牌的列表,并希望格式化此列表,以便在我打印时,它是人类可读的。
清单:
tokens = ['<h1>','Hello','World','</h1>','<p>','Welcome','to','this','planet','</p>']
我希望输出看起来像格式化之后:
标题:Hello World
段落:欢迎来到这个星球
到目前为止我尝试过:
我首先尝试替换<h1>
和<p>
标记,以便在输出时显示“标题:”和“段落:”。我使用FOR循环遍历所有标记并找到要替换的正确标记:
for token in tokens:
# comparing strings
elif token == '<h1>':
print(token.replace('<h1>', 'Heading: '))
elif token == '<p>':
print(token.replace('<p>', 'Paragraph: '))
我需要做的下一部分是打印<h1>
标签和<p>
标签之间的句子。为此我想到了创建一个方法,一般的伪代码是:
def between(tokens, tag, endTag)
if token is between tag and endTag
print the sentence
我真的不知道如何让这个方法在python中运行并尝试过类似的东西:
def between(tokens, tag, endTag):
sentence = []
for token in tokens:
if(token > tag and token < endTag):
sentance.append(token)
return sentance
但是我知道if语句没有意义并且整体上没有用。如何解决此问题并正确格式化列表?
答案 0 :(得分:2)
您可以创建人类可读标签名称的字典,并用其名称替换标签。如果令牌不是标签,则不会替换它。
tags = {"<h1>" : 'Heading1: ', "</h1>" : "\n",
"<p>" : "Paragraph: ", "</p>" : "\n", ... }
new_tokens = [tags.get(token.lower(),token) for token in tokens]
print("".join(new_tokens))
#Heading1: HelloWorld
#Paragraph: Welcometothisplanet
.lower()
函数调用使查找不区分大小写。
答案 1 :(得分:0)
你可以试试这个:
" ".join('@#'.join([e for e in tokens if '</' not in e]).replace("<h1>","\n Heading:").replace("<p>","\n Paragraph:").split("@#"))
鉴于你的字符串没有@#。