Печать кортежа со строковым форматированием в 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)
>>>