Использование форматирования строк Python со списками - PullRequest
90 голосов
/ 27 сентября 2011

Я создаю строку s в Python 2.6.5, которая будет иметь различное количество %s токенов, которые соответствуют количеству записей в списке x. Мне нужно выписать отформатированную строку. Следующее не работает, но показывает, что я пытаюсь сделать. В этом примере три %s токена, а в списке три записи.

s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)

Я бы хотел, чтобы выходная строка была:

1 BLAH 2 FOO 3 BAR

Ответы [ 6 ]

130 голосов
/ 27 сентября 2011

Вам следует взглянуть на метод *1002* формата python. Затем вы можете определить строку форматирования следующим образом:

>>> s = '{0} BLAH {1} BLAH BLAH {2} BLAH BLAH BLAH'
>>> x = ['1', '2', '3']
>>> print s.format(*x)
'1 BLAH 2 BLAH BLAH 3 BLAH BLAH BLAH'
101 голосов
/ 27 сентября 2011
print s % tuple(x)

вместо

print s % (x)
24 голосов
/ 09 января 2015

После этой страницы ресурса , если длина x меняется, мы можем использовать:

', '.join(['%.2f']*len(x))

для создания заполнителя для каждого элемента из списка x. Вот пример:

x = [1/3.0, 1/6.0, 0.678]
s = ("elements in the list are ["+', '.join(['%.2f']*len(x))+"]") % tuple(x)
print s
>>> elements in the list are [0.33, 0.17, 0.68]
16 голосов
/ 26 июня 2015

Поскольку я только что узнал об этой классной вещи (индексация по спискам из строки формата), я добавляю к этому старому вопросу.

s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR'
x = ['1', '2', '3']
print s.format (x=x)

Тем не менее, я до сих пор не понял, как сделать нарезку (внутри строки формата '"{x[2:4]}".format...,), и хотел бы выяснить это, если у кого-то есть идея, однако я подозреваю, что вы просто не можете этого сделать.

9 голосов
/ 09 марта 2018

Вот одна строка.Небольшой импровизированный ответ об использовании формата с print () в списке.

Как насчет этого: (python 3.x)

sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))

Читатьдокументы здесь об использовании format () .

9 голосов
/ 26 апреля 2017

Это был забавный вопрос!Другой способ справиться с этим для списков переменной длины - создать функцию, которая в полной мере использует метод .format и распаковку списков.В следующем примере я не использую необычное форматирование, но его можно легко изменить в соответствии с вашими потребностями.

list_1 = [1,2,3,4,5,6]
list_2 = [1,2,3,4,5,6,7,8]

# Create a function that can apply formatting to lists of any length:
def ListToFormattedString(alist):
    # Create a format spec for each item in the input `alist`.
    # E.g., each item will be right-adjusted, field width=3.
    format_list = ['{:>3}' for item in alist] 

    # Now join the format specs into a single string:
    # E.g., '{:>3}, {:>3}, {:>3}' if the input list has 3 items.
    s = ','.join(format_list)

    # Now unpack the input list `alist` into the format string. Done!
    return s.format(*alist)

# Example output:
>>>ListToFormattedString(list_1)
'  1,  2,  3,  4,  5,  6'
>>>ListToFormattedString(list_2)
'  1,  2,  3,  4,  5,  6,  7,  8'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...