我如何将这个for循环的输出变成一个字符串,变成一个变量?

时间:2009-02-24 22:52:33

标签: python

在这个循环中,我正在尝试接受用户输入并不断将其放入列表中,直到它们写入“停止”。当循环被破坏时,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>

5 个答案:

答案 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允许您遍历列表的元素,而不必迭代索引变量,然后用于查找列表中的元素。