在Python中使用字符串格式打印元组

时间:2009-09-21 17:03:46

标签: 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

我能在世界上做到这一点吗?有点失去了,所以如果你们能指出我正确的方向:)

15 个答案:

答案 0 :(得分:178)

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

使用感兴趣的元组作为唯一项目,即(thetuple,)部分,使单个元组成为关键位。

答案 1 :(得分:45)

请注意,%语法已过时。使用str.format,这更简单,更易读:

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

答案 2 :(得分:28)

上面给出的许多答案都是正确的。正确的方法是:

>>> 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(){{3 }}:'!s''!r'

答案 3 :(得分:22)

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

请注意(tup,)是一个包含元组的元组。外部元组是%运算符的参数。内部元组是其内容,实际上是打印出来的。

(tup)是括号中的表达式,在评估时会生成tup

带尾随逗号的

(tup,)是一个元组,其中只包含tup成员。

答案 4 :(得分:8)

这不使用字符串格式,但您应该能够:

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),)

请注意,这假设您使用的是早于3.0的Python版本。

答案 5 :(得分:4)

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)

答案 6 :(得分:3)

除了其他答案中提出的方法之外,由于Python 3.6,您还可以使用Literal String Interpolation(f字符串):

>>> tup = (1,2,3)
>>> print(f'this is a tuple {tup}')
this is a tuple (1, 2, 3)

答案 7 :(得分:1)

我认为最好的方法是:

t = (1,2,3)

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

如果您熟悉printf样式格式,那么Python支持自己的版本。在Python中,这是使用应用于字符串的“%”运算符(模运算符的重载)完成的,该运算符接受任何字符串并对其应用printf样式格式。

在我们的例子中,我们告诉它打印“This is a tuple:”,然后添加字符串“%s”,对于实际的字符串,我们传入元组的字符串表示形式(通过调用str(t))。

如果您不熟悉printf样式格式,我强烈建议学习,因为它非常标准。大多数语言都以这种或那种方式支持它。

答案 8 :(得分:1)

请注意,如果元组只有一个项目,则会添加一个尾随逗号。 e.g:

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(',)'),#39;)因为元组可能只有这样做1个项目(' Tom',),因此需要删除尾随逗号:

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

请建议您是否有合适的方法在输出中删除此逗号。

答案 9 :(得分:1)

对于python 3

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

答案 10 :(得分:0)

试着这个来得到答案:

>>>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')

这意味着上面的print语句如下所示: 打印(&#34;值:%s&#34;%(&#39; 1&#39;,&#39; 2&#39;))这是一个错误!

因此:

>>> (d,)
(('1', '2'),)
>>> 

上面会正确地输入打印的参数。

答案 11 :(得分:0)

即使这个问题已经很老了并且有很多不同的答案,我仍然想添加恕我直言,这是最“ pythonic”的,也是可读/简洁的答案。

由于Antimony已经正确显示了常规的tuple打印方法,因此这是为分别打印元组中的每个元素而添加的一项功能,因为Fong Kah Chun已经使用%s语法正确显示了。 / p>

有趣的是,它仅在注释中被提及,但是使用星号运算符解压缩元组可以使用str.format方法分别打印元组元素时获得充分的灵活性和可读性。 >

tup = (1, 2, 3)
print('Element(s) of the tuple: One {0}, two {1}, three {2}'.format(*tup))

这也避免了在打印单元素元组时打印尾随逗号,这是Jacob CUI使用replace规避的。 (即使恕我直言,如果要在打印时保留类型表示,则尾随的逗号表示都是正确的 ):

tup = (1, )
print('Element(s) of the tuple: One {0}'.format(*tup))

答案 12 :(得分:0)

您也可以尝试这一点;

tup = (1,2,3)
print("this is a tuple {something}".format(something=tup))

您不能仅将%something(tup)一起使用,这是因为元组具有打包和解包的概念。

答案 13 :(得分:0)

在 python3 中使用 f-string 进行快速打印。

tup = (1,2,3)
print(f"this is a tuple {tup}")

答案 14 :(得分:-5)

谈话很便宜,告诉你代码:

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