Вопрос-Ответ

How to create a "singleton" tuple with only one element

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

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

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
Переведено автоматически
Ответ 1

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


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

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

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

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

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

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

^ ^

Из документации по Python:


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


Если вы действительно ненавидите синтаксис с запятыми в конце, обходной путь - передать list в tuple() функцию:

x = tuple(['a'])
Ответ 2

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

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
Ответ 3

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

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

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>>
Ответ 4

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

x_list = [1]

x_tuple = tuple(x_list)

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

(1,)

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

=> x_list.append(0)

=> x_tuple = tuple(x_list)

(1, 0)
python