ทูเบิล (Tuple)

ความหมายของ Tuple

Tuple จะคล้ายกับ List แต่สิ่งที่แตกต่างกันคือ Tuple นั้นเป็นประเภทข้อมูลที่ไม่สามารถเปลี่ยนแปลงได้ เมื่อไม่ต้องการให้ส่วนใดส่วนหนึ่งของโปรแกรมเผลอไปเปลี่ยน Value ก็ควรใช้ Tuple การสร้าง Tuple นั้น จะอยู่ภายในวงเล็บ `() และคั่นค่าแต่ละตัวด้วยเครื่องหมายคอมมา (,) อย่างไรก็ตามในบางครั้งเครื่องหมายวงเล็บอาจละไว้ไม่ต้องใส่ก็ได้ถ้าโค้ดอ่านแล้วไม่เกิดความสับสน ส่วนการเข้าถึงค่าใน Tuple ใช้ index เหมือนกับ list การสร้าง Tuple เป็นดังตัวอย่างต่อไปนี้

การสร้าง Tuple
>>> t = 'a', 'b', 'c'
>>> t ('a', 'b', 'c')
>>> t = 'a',
>>> t
('a',)
ตัวอย่างที่แสดงให้เห็นว่า Tuple ไม่สามารถเปลี่ยนแปลงได้
>>> t = ('a', 'b', 'c')
>>> t[0]
'a'
>>> t[1]
'b'
>>> t[1:]
('b', 'c')
>>> t[0] = 'z'
Traceback (most recent call last):
   File ''<pyshell#16>'', line 1, in <module>
      t[0] = 'z'
TypeError: 'tuple' object does not support item assignment

การสลับค่าของ Tuple

การสลับค่าของ Tuple สามารถเขียน a, b = b, a และสามารถกำหนดค่าจาก String มาเป็น Tuple ได้ด้วยคำสั่ง split() เช่น username, domain = 'support@classstart.org'.split('@') เป็นดังตัวอย่างต่อไปนี้

Tuple assignment
>>> username, domain = '[email protected]'.split('@')
>>> username
'support'
>>> domain
'classstart.org'

การเก็บค่าการดำเนินการใน Tuple

เราสามารถใช้ Tuple ในการเก็บค่าที่ได้จากการดำเนินการได้โดยตรง เช่น floor, reminder = divmod(7, 3) โดยที่ floor คือ ค่าจำนวนเต็มที่ได้จากการหาร ส่วน remainder คือค่าของเศษที่ได้จากการหาร เป็นดังตัวอย่างต่อไปนี้

การให้ค่ากับมาเป็น Tuple
>>> t = divmod(7,3)
>>> t
(2, 1)
>>> floor, remainder = divmod(7,3)
>>> floor
2
>>> remainder
1

ตัวอย่างการเขียนฟังก์ชันเพื่อให้ค่ากับมาเป็น Tuple เป็นดังนี้ Source code:

ตัวอย่างการเขียนฟังก์ชันเพื่อให้ค่ากับมาเป็น Tuple
def split_email(email):
   return email.split('@')

ซึ่งได้ผลลัพธ์ดังนี้

ผลลัพธ์ตัวอย่างการเขียนฟังก์ชันเพื่อให้ค่ากับมาเป็น Tuple
>>> username, domain = split_email('[email protected]')
>>> username
'support'
>>> domain
'classstart.org'

ฟังก์ชัน list() เปลี่ยน tuple ให้เป็น list

ตัวอย่างการใช้ฟังก์ชัน list() เปลี่ยน tuple ให้เป็น list

ฟังก์ชัน list()
>>> t = (1,2,3,4,5)
>>> t
(1,2,3,4,5)
>>> type(t)
|<class \rq{}tuple\rq{}>|
>>> mylist = list(t)
>>> mylist
[1,2,3,4,5]

Dictionary และ Tuple

เมธอด items() ของ Dictionary จะให้ค่าเป็น List ของ Tuples โดย Tuples แต่ละตัวคือ Key และ Value ดังตัวอย่างต่อไปนี้

items() ของ Dictionary จะให้ค่าเป็น List ของ Tuples
>>> d = {'ppt' : 360, 'scb' : 160}
d
{'ppt' : 360, 'scb' : 160}
>>> d.items()
dict_items([('ppt', 360),('scb', 160)])

สรุปความแตกต่างในการใช้ Data Types คือถ้าหากต้องการลำดับของอักษร จะใช้ String ถ้าต้องการลำดับของค่าที่เปลี่ยนแปลงได้จะใช้ List ถ้าต้องการลำดับของค่าที่เปลี่ยนแปลงไม่ได้จะใช้ Tuple ถ้าต้องการคู่ลำดับของ Key กับ Value จะใช้ Dictionary

แบบฝึกหัด

  1. จงเขียนโปรแกรมสร้าง Tuple มีค่าดังต่อไปนี้ ("tuple", False, 3.2, 1) และแสดงค่าออกมา

  2. จงเขียนโปรแกรมสร้าง Tuple มีค่าดังต่อไปนี้ 4 8 3 แล้วทำการแยกค่าแต่ละค่าให้เป็นตัวแปรแต่ละตัว แล้วให้คำนวณผลรวมของตัวแปรทั้งหมด

  3. จงเขียนโปรแกรมสร้าง Tuple มีค่าดังต่อไปนี้ 4 6 2 8 3 1 แล้วให้แปลง Tuple เป็น List และการเพิ่มเลข 30 เข้าไป แล้วให้แปลง list กลับมาเป็น Tuple ทำการ Print Tuple นั้น

  4. จงเขียนโปรแกรมแปลง Tuple ให้เป็น String โดยให้ Tuple มีค่าคือ ('e', 'x', 'e', 'r', 'c', 'i', 's', 'e', 's')

  5. จงเขียนโปรแกรมตรวจสอบว่ามีข้อมูลอยู่ใน Tuple หรือไม่ โดยให้ Tuple มีค่าคือ ("w", 3, "r", "e", "s", "o", "u", "r", "c", "e")