Çünkü bu ilk iki öğe tuple değil; onlar sadece dizeler. Parantez onları otomatik olarak dizilemez. Python'a bir demet olması gerektiğini belirtmek için dizeden sonra bir virgül eklemelisiniz.
>>> type( ('a') )
<type 'str'>
>>> type( ('a',) )
<type 'tuple'>
Örnek kodunuzu düzeltmek için buraya virgül ekleyin:
>>> a = [('a',), ('b',), ('c', 'd')]
^ ^
Gönderen Python Dokümanlar :
Özel bir sorun, 0 veya 1 öğe içeren tuple'ların oluşturulmasıdır: sözdiziminde bunları karşılamak için bazı ekstra tuhaflıklar vardır. Boş demetler, boş bir parantez çifti ile oluşturulur; tek öğeli bir demet, bir değeri virgülle takip ederek oluşturulur (tek bir değeri parantez içine almak yeterli değildir). Çirkin ama etkili.
Sondaki virgül sözdiziminden gerçekten nefret ediyorsanız list, tuple()işleve bir çözüm a iletmektir :
x = tuple(['a'])
('a')sadece değerlendirir'a'