Как бы сделать вывод этого цикла for в строку, в переменную? - PullRequest
0 голосов
/ 25 февраля 2009

В этом цикле я пытаюсь принять пользовательский ввод и постоянно помещать его в список, пока они не напишут «стоп». Когда цикл прерывается, цикл 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 ]

3 голосов
/ 25 февраля 2009

В 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'
2 голосов
/ 25 февраля 2009

Ненавижу быть человеком, который отвечает на другой вопрос, но генерация 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()
2 голосов
/ 25 февраля 2009
s = "\n".join(['<li>' + i + '</li>' for i in x])
1 голос
/ 25 февраля 2009
list_output = "<li>%s</li>\n" * len(x) % tuple(x)
0 голосов
/ 25 февраля 2009

Замените цикл for внизу следующим:

list_output=""
for aLine in x:
    list_output += '<li>'+aLine+'</li>\n'

Обратите также внимание, что, поскольку x является списком, Python позволяет выполнять итерацию по элементам списка вместо того, чтобы выполнять итерации по индексной переменной, которая затем используется для поиска элементов в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...