在这个循环中,我正在尝试接受用户输入并不断将其放入列表中,直到它们写入“停止”。当循环被破坏时,for循环打印出所有的li。
我如何获取for循环的输出并使其成为一个字符串,以便我可以将其加载到变量中?
x = ([])
while True:
item = raw_input('Enter List Text (e.g. <li><a href="#">LIST TEXT</a></li>) (Enter "stop" to end loop):\n')
if item == 'stop':
print 'Loop Stopped.'
break
else:
item = make_link(item)
x.append(item)
print 'List Item Added\n'
for i in range(len(x)):
print '<li>' + x[i] + '</li>\n'
我希望它最终像这样:
代码:
print list_output
输出:
<li>Blah</li>
<li>Blah</li>
<li>etc.</li>
答案 0 :(得分:3)
在python中,字符串支持join
方法(概念上与split
相反),允许您使用字符串将列表的元素(技术上,可迭代的)连接在一起。一个非常常见的用例是', '.join(<list>)
,用于将列表中的元素复制到逗号分隔的字符串中。
在你的情况下,你可能想要这样的东西:
list_output = ''.join('<li>' + item + '</li>\n' for item in x)
如果您希望列表元素由换行符分隔,但在字符串末尾没有换行符,则可以执行以下操作:
list_output = '\n'.join('<li>' + item + '</li>' for item in x)
如果你想变得非常疯狂,这可能是最有效的(虽然我不推荐):
list_output = '<li>' + '</li>\n<li>'.join(item for item in x) + '</li>\n'
答案 1 :(得分:2)
s = "\n".join(['<li>' + i + '</li>' for i in x])
答案 2 :(得分:2)
我不想成为回答不同问题的人,但手工编码的HTML代让我感到恶心。即使您只做这个超级简单的列表生成,我强烈建议您查看Genshi这样的模板语言。
你的程序的Genshi版本(更长一点,但方式更好):
from genshi.template import MarkupTemplate
TMPL = '''<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://genshi.edgewall.org/">
<li py:for="item in items">$item</li>
</html>'''
make_link = lambda x: x
item, x = None, []
while True:
item = raw_input('Enter List Text (Enter "stop" to end loop):\n')
if item == 'stop':
break
x.append(make_link(item))
print 'List Item Added\n'
template = MarkupTemplate(TMPL)
stream = template.generate(items = x)
print stream.render()
答案 3 :(得分:1)
list_output = "<li>%s</li>\n" * len(x) % tuple(x)
答案 4 :(得分:0)
使用以下内容替换底部的for循环:
list_output=""
for aLine in x:
list_output += '<li>'+aLine+'</li>\n'
另请注意,由于x是一个列表,Python允许您遍历列表的元素,而不必迭代索引变量,然后用于查找列表中的元素。