Подтвердить что ты не робот

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

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

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

Ответ 1

Потому что эти первые два элемента не являются кортежами; они просто струны. Скобки не делают их автоматически кортежами. Вы должны добавить запятую после строки, чтобы указать 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

Существует два способа создания кортежа с одним элементом.
(i) Во-первых, создайте отдельный элемент с разделенной запятой, тогда это будет кортеж.

>>>t2 = ('a',)
>>>print(type(t2))
<class tuple>

(ii) Второе - создать список с одним элементом, а затем преобразовать в кортеж. Тогда это будет кортеж.

>>>l1 = [1]
>>>t1 = tuple(l1)
>>>print(type(t1))
<class tuple>