2010-09-09 7 views
1

Когда я печатаю кортеж (u'1S²') я предсказанный выход 1S²Нужна помощь с кортежей в Python

Однако, когда я печатаю кортеж (u'1S²',u'2S¹') я получаю выход (u'1S\xb2', u'2S\xb9').

Почему это? Что я могу сделать по этому поводу?
Кроме того, как получить количество элементов в кортеже?

ответ

4

Выражение (u'1S²') не является tuple, это значение unicode. 1-кортеж написан на Python таким образом: (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

Я вижу такое же поведение, используя v2.6.5 для Linux. +1 для заметки на одном элементе. – Johnsyweb

2

(u'1S²') не кортеж. (u'1S²',) - это кортеж, содержащий u'1S² '. len((u'1S²',)) возвращается длина кортежа, то есть, 1.

также при печати переменных, остерегайтесь есть 2 вида продукции:

  • программист дружественные строковое представление объекта: то есть repr(the_object)
  • текстовое представление объекта, в основном применяется для строк

, если второй не availlable, первый используется. в отличие от строк, кортежи не имеют текстового представления, поэтому дружелюбное представление программиста используется для представления кортежа и его содержимого.

1

Ваш первый пример (u'1S² ') на самом деле не является кортежем, это строка в Юникоде!

>>> 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 
Смежные вопросы