เนื่องจากสององค์ประกอบแรกเหล่านั้นไม่ใช่สิ่งที่เพิ่มขึ้น เป็นเพียงสตริง วงเล็บจะไม่ทำให้เป็นทูโดยอัตโนมัติ คุณต้องเพิ่มลูกน้ำหลังสตริงเพื่อระบุให้ python เป็นทูเพิล
>>> type( ('a') )
<type 'str'>
>>> type( ('a',) )
<type 'tuple'>
หากต้องการแก้ไขโค้ดตัวอย่างของคุณให้เพิ่มเครื่องหมายจุลภาคที่นี่:
>>> a = [('a',), ('b',), ('c', 'd')]
^ ^
จากPython Docs :
ปัญหาพิเศษคือการสร้างสิ่งทอที่มี 0 หรือ 1 รายการ: ไวยากรณ์มีลักษณะพิเศษบางอย่างเพื่อรองรับสิ่งเหล่านี้ tuples ว่างถูกสร้างโดยวงเล็บคู่ว่าง ทูเปิลที่มีหนึ่งไอเท็มถูกสร้างขึ้นโดยทำตามค่าด้วยเครื่องหมายจุลภาค (ไม่เพียงพอที่จะใส่ค่าเดียวในวงเล็บ) น่าเกลียด แต่มีประสิทธิภาพ
หากคุณเกลียดไวยากรณ์ลูกน้ำต่อท้ายวิธีแก้ปัญหาคือส่ง a listไปยังtuple()ฟังก์ชัน:
x = tuple(['a'])
('a')เพิ่งประเมินถึง'a'