Ответ 1
print s % tuple(x)
вместо
print s % (x)
Я строю строку 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
print s % tuple(x)
вместо
print s % (x)
Вы должны взглянуть на format метод 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'
Следуя этой странице ресурс, если длина 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]
Так как я только что узнал об этой классной вещи (индексирование в списки из строки формата), я добавляю к этому старому вопросу.
s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR'
x = ['1', '2', '3']
print s.format (x=x)
Тем не менее, я до сих пор не понял, как делать нарезку (внутри строки формата '"{x[2:4]}".format...
), и мне бы хотелось понять, есть ли у кого-то идея, однако я подозреваю, что вы просто не можете этого сделать.
Это был забавный вопрос! Другой способ справиться с этим для списков переменной длины - создать функцию, которая в полной мере .format
метод .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'
Вот одна строка. Небольшой импровизированный ответ на использование формата с печатью() в списке.
Как насчет этого: (python 3.x)
sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))
Прочитайте документы здесь об использовании format().