Печать кортежа со строковым форматированием в Python

Итак, у меня есть эта проблема. Я получил кортеж (1,2,3), который я должен печатать с форматированием строки. например.

tup = (1,2,3)
print "this is a tuple %something" % (tup)

и это должно печатать представление кортежа с помощью скобок, например

Это кортеж (1,2,3)

Но вместо этого я получаю TypeError: not all arguments converted during string formatting.

Как в мире я могу это сделать? Kinda потерял здесь, поэтому, если вы, ребята, можете указать мне в правильном направлении:)

Ответ 1

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

Создание одноэлементного кортежа с интересующим кортежем как единственный элемент, т.е. часть (thetuple,), является ключевым битом здесь.

Ответ 2

Обратите внимание, что синтаксис % устарел. Используйте str.format, который проще и читабельнее:

t = 1,2,3
print 'This is a tuple {0}'.format(t)

Ответ 3

>>> tup = (1, 2, 3)
>>> print "Here it is: %s" % (tup,)
Here it is: (1, 2, 3)
>>>

Заметим, что (tup,) является кортежем, содержащим кортеж. Внешний кортеж является аргументом оператора%. Внутренний кортеж - это его содержимое, которое на самом деле напечатано.

(tup) - это выражение в скобках, которое при оценке дает результат tup.

(tup,) с конечной запятой является кортежем, который содержит tup как член.

Ответ 4

Многие приведенные выше ответы были правильными. Правильный способ сделать это:

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

Однако возник конфликт, если устаревший оператор '%' String. Как указывали многие, это определенно не устарело, так как оператор '%' String проще комбинировать оператор String со списком данных.

Пример:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
First: 1, Second: 2, Third: 3

Однако, используя функцию .format(), вы получите подробный отчет.

Пример:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
>>> print 'First: {}, Second: {}, Third: {}'.format(1,2,3)
>>> print 'First: {0[0]}, Second: {0[1]}, Third: {0[2]}'.format(tup)

First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3
First: 1, Second: 2, Third: 3

Более того, оператор строки '%' также полезен для нас, чтобы проверить тип данных, например %s, %d, %i, а .format() поддерживает только два флага преобразования: '!s' и '!r'.

Ответ 5

Это не использует форматирование строк, но вы должны иметь возможность:

print 'this is a tuple ', (1, 2, 3)

Если вы действительно хотите использовать форматирование строк:

print 'this is a tuple %s' % str((1, 2, 3))
# or
print 'this is a tuple %s' % ((1, 2, 3),)

Примечание. Предполагается, что вы используете версию Python раньше 3.0.

Ответ 6

t = (1, 2, 3)

# the comma (,) concatenates the strings and adds a space
print "this is a tuple", (t)

# format is the most flexible way to do string formatting
print "this is a tuple {0}".format(t)

# classic string formatting
# I use it only when working with older Python versions
print "this is a tuple %s" % repr(t)
print "this is a tuple %s" % str(t)

Ответ 7

Я думаю, что лучший способ сделать это:

t = (1,2,3)

print "This is a tuple: %s" % str(t)

Если вы знакомы с printf форматированием стиля, то Python поддерживает свою собственную версию. В Python это делается с использованием оператора "%", применяемого к строкам (перегрузка оператора modulo), который принимает любую строку и применяет к нему форматирование в формате printf.

В нашем случае мы говорим, что печатаем "Это кортеж:", а затем добавляем строку "% s", а для текущей строки мы передаем строковое представление кортежа (по вызов str (t)).

Если вы не знакомы с форматированием в формате printf, я настоятельно рекомендую учиться, поскольку он очень стандартный. Большинство языков так или иначе поддерживают его.

Ответ 8

Обратите внимание, что конечная запятая будет добавлена, если кортеж имеет только один элемент. например:

t = (1,)
print 'this is a tuple {}'.format(t)

и вы получите:

'this is a tuple (1,)'

в некоторых случаях, например. вы хотите получить цитируемый список, который будет использоваться в строке запроса mysql, например

SELECT name FROM students WHERE name IN ('Tom', 'Jerry');

вам нужно рассмотреть возможность удаления использования хвостовой запятой replace (',)', ')') после форматирования, потому что возможно, что кортеж имеет только один элемент ('Tom',), поэтому хвостовая запятая должна удаляться:

query_string = 'SELECT name FROM students WHERE name IN {}'.format(t).replace(',)', ')')

Просьба предложить, если у вас есть достойный способ удаления этой запятой на выходе.

Ответ 9

Обсуждение дешево, покажите вам код:

>>> tup = (10, 20, 30)
>>> i = 50
>>> print '%d      %s'%(i,tup)
50  (10, 20, 30)
>>> print '%s'%(tup,)
(10, 20, 30)
>>>