Как создать кортеж только с одним элементом
В приведенном ниже примере я ожидал бы, что все элементы будут кортежами, почему кортеж преобразован в строку, когда он содержит только одну строку?
>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
Ответы
Ответ 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>