Как использовать список (или кортеж) в качестве значения форматирования строки - PullRequest
13 голосов
/ 14 марта 2011

Допустим, эта переменная:

s=['Python', 'rocks']
x = '%s %s' % (s[0], s[1])

Теперь я хотел бы заменить гораздо более длинный список и добавить все значения списка отдельно, например, s [0], s [1], ... s [n], не кажется правильным

Цитата из документации:

Заданный формат% values ​​... Если для формата требуется один аргумент, значения могут быть одним объектом, не являющимся кортежем.[4] В противном случае значения должны быть кортежем с точным количеством элементов, указанным в строке формата, или одним объектом отображения (например, словарем).

Я пробовал много комбинаций с кортежамии списки как средства форматирования, но безуспешно, поэтому я подумал спросить здесь

Надеюсь, это понятно

[править] Хорошо, возможно, я не достаточно ясно

У меня естьбольшая текстовая переменная, например

s = ['a', 'b', ..., 'z']

x = """some text block
          %s
          onother text block
          %s
          ... end so on...
          """ % (s[0], s[1], ... , s[26])

Я бы хотел изменить % (s[0], s[1], ... , s[26]) более компактно, не вводя каждое значение вручную

Ответы [ 7 ]

38 голосов
/ 14 марта 2011

Вам не нужно прописывать все индексы:

s = ['language', 'Python', 'rocks']
some_text = "There is a %s called %s which %s."
x = some_text % tuple(s)

Количество элементов в s должно совпадать с количеством точек вставки в строке формата.

Начиная с версии 2.6, вы также можете использовать новый метод format, например:

x = '{} {}'.format(*s)
2 голосов
/ 19 апреля 2015

построение на основе ответа @yan для более нового метода .format. Если у вас есть словарь с несколькими значениями для ключа, используйте индекс с ключом для доступа к различным значениям.

>>> s = {'first':['python','really'], 'second':'rocks'}
>>> x = '{first[0]} --{first[1]}-- {second}'.format(**s)
>>> x
'python --really-- rocks'

Внимание: он немного отличается, когда вам нужно получить доступ к одному из значений для ключа, независимого от .format (), который выглядит так:

>>> value=s['first'][i]
1 голос
/ 14 марта 2011

Если вы хотите использовать список элементов, вы можете просто передать кортеж напрямую:

s = ['Python', 'rocks']
x = '%s %s' % tuple(s)

Или вы можете использовать словарь, чтобы сделать свой список раньше:

s = {'first':'python', 'second':'rocks'}
x = '%(first)s %(second)s' % s
1 голос
/ 14 марта 2011

Как присоединиться к кортежу:

x = " ".join(YourTuple)

Пробел - это разделитель членов кортежа

0 голосов
/ 31 января 2018

Если вы серьезно относитесь к введению в ваш формат до 26 строк, вы можете рассмотреть возможность присвоения имен заполнителям. В противном случае, кто-то, глядя на ваш код, не поймет, что такое s[17].

fields = {
    'username': 'Ghostly',
    'website': 'Stack Overflow',
    'reputation': 6129,
}

fmt = '''
Welcome back to {website}, {username}!
Your current reputation sits at {reputation}.
'''

output = fmt.format(**fields)

Конечно, вы можете продолжать использовать список и расширять его до конца Ответ Йохена Ритцела , но его сложнее поддерживать для больших структур. Я могу только представить, как это будет выглядеть с 26 из {} заполнителей.

fields = [
    'Ghostly',
    'Stack Overflow',
    6129,
]

fmt = '''
Welcome back to {}, {}!
Your current reputation sits at {}.
'''

output = fmt.format(*fields)
0 голосов
/ 10 мая 2017

Говори дешево, покажи код:

>>> tup = (10, 20, 30)
>>> lis = [100, 200, 300]
>>> num = 50
>>> print '%d      %s'%(i,tup)
50      (10, 20, 30)
>>> print '%d      %s'%(i,lis)
50      [100, 200, 300]
>>> print '%s'%(tup,)
(10, 20, 30)
>>> print '%s'%(lis,)
[100, 200, 300]
>>> 
0 голосов
/ 16 ноября 2013

Проверьте следующий пример

Пример списка

data = ["John", "Doe", 53.44]
format_string = "Hello"

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])

Здравствуйте, Джон Доу, ваш текущий баланс составляет 53 $

Пример кортежа

data = ("John", "Doe", 53.44)
format_string = "Hello"

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])

Здравствуйте, Джон Доу, ваш текущий баланс составляет 53 $

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