Форматировать строку со всеми элементами списка

words = ['John', 'nice', 'skateboarding'] statement = "%s you are so %s at %s" % w for w in words 

производит

 File "<stdin>", line 1 statement = "%s you are so %s at %s" % w for w in words ^ SyntaxError: invalid syntax 

Что я здесь делаю неправильно? Предполагается следующее: len (words) == число '% s' в выражении

  • Есть ли разница между `%` -format operator и `str.format ()` в python относительно кодировки unicode и utf-8?
  • Javascript эквивалентен python .format ()
  • Отформатируйте строку, в которой есть дополнительные фигурные скобки
  • Формат% s "% vs" {0} ". Format () vs"? "
  • Печать логических значений True / False с помощью метода format () в Python
  • Использование форматирования строк Python со списками
  • Как булевы форматируются в Строках в Python?
  • 3 Solutions collect form web for “Форматировать строку со всеми элементами списка”

     >>> statement = "%s you are so %s at %s" % tuple(words) 'John you are so nice at skateboarding' 

    Вы также можете использовать новое форматирование строки формата .format с оператором «splat»:

     >>> words = ['John', 'nice', 'skateboarding'] >>> statement = "{0} you are so {1} at {2}".format(*words) >>> print (statement) John you are so nice at skateboarding 

    Это работает, даже если вы передаете генератор:

     >>> statement = "{0} you are so {1} at {2}".format(*(x for x in words)) >>> print (statement) John you are so nice at skateboarding 

    Хотя в этом случае нет необходимости передавать генератор, когда вы можете передавать words напрямую.

    Одна окончательная форма, которая, по моему мнению, довольно изящна:

     >>> statement = "{0[0]} you are so {0[1]} at {0[2]}".format(words) >>> print statement John you are so nice at skateboarding 

    Две вещи ошибочны:

    • Вы не можете создать выражение генератора без круглых скобок вокруг него. Просто положить w for w in words является недопустимым синтаксисом для python.

    • Оператор форматирования строки % требует ввода в качестве кортежа, сопоставления или одного значения (не являющегося кортежем или сопоставлением). Генератор не является кортежем, он будет рассматриваться как одно значение. Хуже того, выражение генератора не будет повторяться:

       >>> '%s' % (w for w in words) '<generator object <genexpr> at 0x108a08730>' 

    Так будет работать следующее:

     statement = "%s you are so %s at %s" % tuple(w for w in words) 

    Обратите внимание, что выражение вашего генератора фактически не преобразует слова или не делает выбор из списка words , поэтому здесь оно избыточно. Так что проще всего просто перечислить список на tuple :

     statement = "%s you are so %s at %s" % tuple(words) 
    Python - лучший язык программирования в мире.