2010-09-09 55 views
1

元组帮我打印元组(u'1S²')我得到的1S²需要与蟒蛇

但是所预测的输出,当我打印的元组(u'1S²',u'2S¹')我得到的输出(u'1S\xb2', u'2S\xb9')

这是为什么?我能做些什么呢?
另外,如何获取元组中的项目数?

回答

4

表达式(u'1S²')不是tuple,这是一个unicode的值。这种方式使用Python编写1元组:(u'1S²',)

print value声明实际上打印了str(value)。如果你需要输出一些unicode字符串,你应该使用这样的事情:

print u' '.join((u'1S²',u'2S¹')) 

虽然有可能与字符编码的问题。如果你知道你的控制台编码,可以编码您unicode值手动str

ENCODING = 'utf-8' 
print u' '.join((u'1S²',u'2S¹')).encode(ENCODING) 

的元组,列表,字符串和其他序列iterms可以使用len功能获得的数量。

2

你有什么平台和Python版本?我没有看到这种行为。我总是得到\x转义序列与Python 2.6:

Python 2.6.5 (r265:79063, Apr 26 2010, 10:14:53) 
>>> (u'1S²') 
u'1S\xb2' 
>>> (u'1S²',) 
(u'1S\xb2',) 
>>> (u'1S²',u'1S¹') 
(u'1S\xb2', u'1S\xb9') 

作为一个方面说明,(u'1S²')是不是一个元组,它只是一个与它周围的括号字符串。之后需要用逗号来创建单个元素元组:(u'1S²',)

至于项目的数量,使用len

>>> len((u'1S²',u'1S¹')) 
2 
+0

我看到在Linux上使用v2.6.5相同的行为。单个元素元组的注释+1。 – Johnsyweb 2010-09-09 20:25:36

2

(u'1S²')不是一个元组。 (u'1S²',)是一个包含u'1S²'的元组。 len((u'1S²',))返回元组的长度,即,1.

也,打印变量时,当心有2种类型的输出:

  • 对象的程序员友好字符串表示:即repr(the_object)
  • 对象的文本表示,大多适用于串

如果第二不availlable,第一被使用。与字符串不同,元组没有文本表示,因此程序员友好的表示形式用于表示元组及其内容。

1

你的第一个例子(u'1S²')实际上并不是一个元组,它是一个unicode字符串!

>>> t = (u'1S²') 
>>> type(t) 
<type 'unicode'> 
>>> print t 
1S² 

逗号是什么使得它一个元组:

>>> t = (u'1S²',) 
>>> type(t) 
<type 'tuple'> 
>>> print t 
(u'1S\xb2',) 

发生了什么事,当你打印一个元组,你会得到它的每一个部件的再版()是。要打印组件,请按索引单独解决它们。你可以得到一个元组与LEN(长度):

>>> print t[0] 
1S² 
>>> len(t) 
1