В приведенном ниже примере я ожидал бы, что все элементы будут кортежами, почему кортеж преобразуется в строку, если он содержит только одну строку?
>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
('a')
просто оценивает'a'
,
:a = 1, 2, 3; print a
()
, который состоит только из пары круглых скобок.False
пустой кортеж подходит практически для всех (если вы понимаете, о чем я).Ответы:
Потому что эти первые два элемента не являются кортежами; они просто струны. Скобки не делают их автоматически кортежами. Вы должны добавить запятую после строки, чтобы указать python, что это должен быть кортеж.
Чтобы исправить ваш пример кода, добавьте сюда запятые:
Из документов Python :
Если вы действительно ненавидите синтаксис Запятая, обходной путь, чтобы пропускать
list
кtuple()
функции:источник
tuple
принимает итерацию , которой является строка (перебирает символы). Если вы настаиваете на не используя Запятая, затем сделать промежуточный список:tuple(['abc'])
.Ваши первые два примера не являются кортежами, это строки. Кортежи с одним элементом требуют завершающей запятой, например:
источник
('a')
не кортеж, а просто строка.Вам нужно добавить дополнительную запятую в конце, чтобы
python
они воспринимались какtuple
: -источник