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