Печать кортежа с форматированием строк в 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 вместо.
как в мире я могу это сделать? Своего рода потерял здесь, так что если вы, ребята, могли бы указать мне в правильном направлении:)
10 ответов:
>>> thetuple = (1, 2, 3) >>> print "this is a tuple: %s" % (thetuple,) this is a tuple: (1, 2, 3)создание одноэлементного кортежа с кортежем интереса в качестве единственного элемента, т. е.
(thetuple,)часть, является ключевым здесь.
отметим, что
%синтаксис является устаревшим. Используйтеstr.format, что проще и читабельнее:t = 1,2,3 print 'This is a tuple {0}'.format(t)
многие ответы, приведенные выше верны. Правильный способ сделать это:
>>> thetuple = (1, 2, 3) >>> print "this is a tuple: %s" % (thetuple,) this is a tuple: (1, 2, 3)однако, был спор о том, если
'%'строковый оператор устарел. Как многие отметили, он определенно не устарел, как'%'строковый оператор легче комбинировать строковый оператор со списком данных.пример:
>>> tup = (1,2,3) >>> print "First: %d, Second: %d, Third: %d" % tup First: 1, Second: 2, Third: 3однако, используя
>>> tup = (1, 2, 3) >>> print "Here it is: %s" % (tup,) Here it is: (1, 2, 3) >>>отметим, что
(tup,)кортеж с кортежем. Внешний Кортеж является аргументом для оператора%. Внутренний Кортеж - это его содержимое, которое фактически печатается.
(tup)- это выражение в скобках, которое при оценке результатовtup.
(tup,)с конечной запятой-это Кортеж, который содержитtupкак только член.
это не использовать форматирование строк, но вы должны быть в состоянии сделать:
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.
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)
Я думаю, что лучший способ сделать это:
t = (1,2,3) print "This is a tuple: %s" % str(t)Если вы знакомы с printf форматирование стиля, затем Python поддерживает свою собственную версию. В Python это делается с помощью оператора"%", применяемого к строкам (перегрузка оператора по модулю), который принимает любую строку и применяет к ней форматирование в стиле printf.
в нашем случае мы говорим ему напечатать " это кортеж:", а затем добавить строку "%s", и для фактической строки мы передаем строковое представление кортежа (путем вызова str (t)).
Если вы не знакомы с форматированием стиля printf, я настоятельно рекомендую учиться, так как это очень стандартно. Большинство языков поддерживают его так или иначе.
обратите внимание, что конечная запятая будет добавлена, если Кортеж имеет только один элемент. например:
t = (1,) print 'this is a tuple {}'.format(t)и вы получите:
'this is a tuple (1,)'в некоторых случаях, например, вы хотите получить список кавычек для использования в строке запроса mysql, например
SELECT name FROM students WHERE name IN ('Tom', 'Jerry');вы должны рассмотреть, чтобы удалить хвостовую запятую использовать заменить(',)', ')') после форматирования, потому что возможно, что Кортеж имеет только 1 элемент типа ('Tom',), поэтому хвостовая запятая должна быть удалено:
query_string = 'SELECT name FROM students WHERE name IN {}'.format(t).replace(',)', ')')пожалуйста, предложите если у вас есть достойный способ удаления запятой в выходных данных.
попробуйте это, чтобы получить ответ:
>>>d = ('1', '2') >>> print("Value: %s" %(d)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: not all arguments converted during string formattingесли мы помещаем только один кортеж внутри (), он сам создает кортеж:
>>> (d) ('1', '2')Это означает, что приведенный выше оператор печати будет выглядеть так: печать ("значение: %s" %('1', '2')) что является ошибкой!
отсюда:
>>> (d,) (('1', '2'),) >>>выше будут правильно подаваться аргументы печати.
говорить дешево, показать вам код:
>>> tup = (10, 20, 30) >>> i = 50 >>> print '%d %s'%(i,tup) 50 (10, 20, 30) >>> print '%s'%(tup,) (10, 20, 30) >>>
Comments