Использование кортежей с .format в python - PullRequest
2 голосов
/ 27 января 2020

при использовании .format() с текстовым заполнением я сталкиваюсь с этой ошибкой.

что у меня есть:

tuple = ('a', 'b', 'c')
text = "Hi {} hello {} ola {}"
#command I tried to run
text.format(tuple)

Вывод, к которому я стремлюсь:

 Hi a hello b ola c

ошибка, которую я получаю:

IndexError: индекс кортежа вне диапазона

не уверен, как это исправить!

Ответы [ 4 ]

7 голосов
/ 27 января 2020

Вы хотите использовать итеративную распаковку :

>>> t = (1, 2, 3)
>>> "{}, {}, {}".format(*t)
'1, 2, 3'

Примечание: не используйте tuple в качестве имени переменной, так как это зарезервированное Python встроенная функция (т.е. tuple([1, 2, 3])).

3 голосов
/ 27 января 2020

@ ответ FelipeFaria - правильное решение, объяснение состоит в том, что в text.format(tuple) вы, по сути, добавляете весь кортеж к первому держателю

print(text.format(tuple))

, если сработаете, напечатать что-то вроде

Hi (a, b, c) hello { } ola { }

format ожидает 3 значения, так как он нашел только одно, это вызовет tuple index out of range исключение.

1 голос
/ 27 января 2020

Я согласился с предыдущим ответом "не используйте кортеж в качестве имени переменной". Я изменил ваш код, теперь вы можете попробовать это. Это будет легче понять.

tup = ('a', 'b', 'c')
text = "Hi {} hello {} ola {}"
tex = text.format(*tup)
print(tex)

и для распаковки кортежа вы должны добавить *

0 голосов
/ 27 января 2020

См. вопрос для How to unpack a tuple in Python.

Я цитирую один из ответов:

Как правило, вы можете использовать синтаксис func(*tuple). Вы даже можете передать часть кортежа, что похоже на то, что вы пытаетесь сделать здесь:

t = (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(*t[0:7])

Это называется распаковкой кортежа и может использоваться для других итераций (таких как списки) тоже.

Для вас вы можете попробовать (как упоминалось в одном из ответов, вам следует избегать использования любого зарезервированного ключевого слова для ваших переменных и методов):

t = ('a', 'b', 'c')
text = "Hi {} hello {} ola {}".format(*t)
print(text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...