Как создать кортеж только с одним элементом

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

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>

5 ответов

Решение

Потому что эти первые два элемента не являются кортежами; они просто струны. Скобки не делают их автоматически кортежами. Вы должны добавить запятую после строки, чтобы указать Python, что это должен быть кортеж.

>>> type( ('a') )
<type 'str'>

>>> type( ('a',) )
<type 'tuple'>

Чтобы исправить пример кода, добавьте запятую здесь:

>>> a = [('a',), ('b',), ('c', 'd')]

             ^

Из документов Python:

Особой проблемой является создание кортежей, содержащих 0 или 1 элемент: в синтаксисе есть некоторые дополнительные причуды для их учета. Пустые кортежи состоят из пустой пары скобок; кортеж с одним элементом создается следующим за запятой значением (недостаточно заключить одно значение в скобки). Уродливо, но эффективно.

Ваши первые два примера - это не кортежи, а строки. Кортежи из одного элемента требуют запятой, как в:

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]

('a') это не кортеж, а просто строка.

Вам нужно добавить дополнительную запятую в конце, чтобы сделать python принять их как tuple: -

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>> 

=> Если вам нужно преобразовать список в кортеж, элемент которого имеет один идентификатор. тогда это решение вам поможет.

      x_list = [1]

x_tuple = tuple(x_list)

=> Вы получите это

(1,)

=> теперь добавьте 0 в список, а затем преобразуйте его в кортеж

      => x_list.append(0)

=> x_tuple = tuple(x_list)

(1, 0)

Наткнулся на эту страницу и был удивлен, почему никто не упомянул один из довольно распространенных методов для кортежа с одним элементом. Возможно, это проблема версии, так как это очень старый пост. Во всяком случае, вот оно:

      >>> b = tuple(('a'))
>>> type(b)
<class 'tuple'>
Другие вопросы по тегам