ผลต่างระหว่างรุ่นของ "Python Programming/Tuples"
Cardcaptor (คุย | มีส่วนร่วม) (สร้างหน้าใหม่: Tuple เป็นโครงสร้างข้อมูลที่ทำหน้าที่คล้ายกับอะเรย์ขนาดค...) |
Chaiporn (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 17 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน) | |||
แถว 1: | แถว 1: | ||
− | Tuple เป็นโครงสร้างข้อมูลที่ทำหน้าที่คล้ายกับอะเรย์ขนาดคงที่ | + | Tuple เป็นโครงสร้างข้อมูลที่ทำหน้าที่คล้ายกับอะเรย์ขนาดคงที่ |
+ | |||
+ | เราสามารถสร้าง tuple ได้โดยการนำค่าหลายๆ ค่ามาเรียงต่อกัน แล้วคั่นค่าที่ติดกันด้วยเครื่องหมายคอมมา (,) | ||
+ | <pre title="interpreter"> | ||
+ | >>> t = 42, "Misaka Mikoto", "tsunderailgun", 4649.398 | ||
+ | >>> print t | ||
+ | (42, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001) | ||
+ | </pre> | ||
+ | |||
+ | เราสามารถเรียกสมาชิกแต่ละตัวของ tuple มาใช้ได้เหมือนกับการเรียกดูสมาชิกของอะเรย์ในภาษา C | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[0] | ||
+ | 42 | ||
+ | >>> t[1] | ||
+ | 'Misaka Mikoto' | ||
+ | >>> t[2] | ||
+ | 'tsunderailgun' | ||
+ | >>> t[3] | ||
+ | 4649.3980000000001 | ||
+ | </pre> | ||
+ | |||
+ | นอกจากนี้ในภาษาไพทอน เลขที่เราใช้เป็นดรรชนีบ่งตำแหน่งของสมาชิกใน tuple จะเป็นเลขลบก็ได้ โดยที่ <tt>t[-k]</tt> จะหมายถึงสมาชิกที่เริ่มนับจากด้านหลังของ t ไปเป็นตัวที่ k | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[-1] | ||
+ | 4649.3980000000001 | ||
+ | >>> t[-2] | ||
+ | 'tsunderailgun' | ||
+ | >>> t[-3] | ||
+ | 'Misaka Mikoto' | ||
+ | >>> t[-4] | ||
+ | 42 | ||
+ | </pre> | ||
+ | |||
+ | tuple มีสมบัติที่สำคัญประการหนึ่งคือเราไม่สามารถเปลี่ยนแปลงสมาชิกของมันหลังจากสร้างมันเสร็จแล้วได้ (ภาษาฝรั่งเรียกโครงสร้างข้อมูลประเภทนี้ว่า immutable data structure) | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[0] = 999 | ||
+ | Traceback (most recent call last): | ||
+ | File "<stdin>", line 1, in <module> | ||
+ | TypeError: 'tuple' object does not support item assignment | ||
+ | </pre> | ||
+ | |||
+ | แต่ไม่ได้หมายความว่าเราจะเปลี่ยนค่าของตัวแปรให้เป็น tuple อื่นไม่ได้ | ||
+ | <pre title="interpreter"> | ||
+ | >>> t = 999, "Misaka Mikoto", "tsunderailgun", 4649.398, 881, 889 | ||
+ | >>> print t | ||
+ | (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001, 881, 889) | ||
+ | </pre> | ||
+ | |||
+ | อนึ่ง เราสามารถตรวจสอบว่าค่าค่าหนึ่งอยู่ใน tuple ได้หรือไม่ด้วยเครื่องหมาย <tt>in</tt> | ||
+ | <pre title="interpreter"> | ||
+ | >>> t = 999, "Misaka Mikoto", "tsunderailgun", 4649.398, 881, 889 | ||
+ | >>> "Misaka Mikoto" in t | ||
+ | True | ||
+ | >>> 888 in t | ||
+ | False | ||
+ | </pre> | ||
+ | |||
+ | == Packing และ Unpacking == | ||
+ | การกำหนดค่าหลาย ๆ ค่าลงในตัวแปรสามารถเรียกได้ว่าเป็นการ "แพ็ก" ข้อมูลให้เป็นทูเปิล เราสามารถกระจายข้อมูลในทูเปิล (หรือ "อันแพ็ก") ลงในตัวแปรหลายตัวพร้อม ๆ กันได้ | ||
+ | |||
+ | >>> a,b,c,d,e,f = t | ||
+ | >>> a | ||
+ | 999 | ||
+ | >>> c | ||
+ | 'tsunderailgun' | ||
+ | |||
+ | เราสามารถใช้หลักการเดียวกันในการกำหนดค่าให้ตัวแปรพร้อมกันหลายตัวได้ | ||
+ | |||
+ | >>> x,y,z = 10,15,2 | ||
+ | >>> x | ||
+ | 10 | ||
+ | >>> y | ||
+ | 15 | ||
+ | >>> z | ||
+ | 2 | ||
+ | |||
+ | == Slicing == | ||
+ | Slicing คือการสร้าง tuple อีกอันหนึ่งขึ้นมาจาก tuple เดิมด้วยการดึงสมาชิกบางส่วนที่อยู่ติดกันออกมา โดยนิพจน์ที่เราใช้ในการทำ slicing จะมีรูปแบบดังนี้ | ||
+ | <<tuple>>[ <<หมายเลขของสมาชิกตัวแรกที่ต้องการ>> : <<หมายเลขของสมาชิกที่อยู่'''หลัง'''สมาชิกตัวสุดท้ายที่เราต้องการ>> ] | ||
+ | ยกตัวอย่าง เช่น ถ้าเราต้องการสมาชิกที่มีหมายเลข 2 ถึงสมาชิกที่มีหมายเลข 3 ของ tuple t เราจะใช้นิพจน์ | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[2:4] | ||
+ | ('tsunderailgun', 4649.3980000000001) | ||
+ | </pre> | ||
+ | และถ้าต้องการสมาชิกตั้งแต่ตัวที่มีหมายเลข 3 ไปจนถึงตัวที่มีหมายเลข 5 เราจะใช้นิพจน์ | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[3:6] | ||
+ | (4649.3980000000001, 881, 889) | ||
+ | </pre> | ||
+ | หมายเลขที่เราใส่ลงในนิพจน์สำหรับทำ slicing สามารถเ้ป็นเลขลบได้ ซึ่งถ้าเป็นเลขลบก็จะมีความหมายเหมือนกับที่กล่าวไว้แล้วข้างบน | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[1:-1] | ||
+ | ('Misaka Mikoto', 'tsunderailgun', 4649.3980000000001, 881) | ||
+ | >>> t[-6:-2] | ||
+ | (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001) | ||
+ | </pre> | ||
+ | เราสามารถละหมายเลขที่ใส่ในนิพจน์ slicing ได้ โดยถ้าละเลขตัวหน้า หมายความว่าให้เริ่มต้นจากเลข 0 แต่ถ้าละเลขตัวหลัง หมายความว่าให้ไปจบที่ท้าย tuple | ||
+ | <pre title="interpreter"> | ||
+ | >>> t[:4] | ||
+ | (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001)' | ||
+ | >>> t[2:] | ||
+ | ('tsunderailgun', 4649.3980000000001, 881, 889) | ||
+ | >>> t[:-1] | ||
+ | (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001, 881) | ||
+ | >>> t[-3:] | ||
+ | (4649.3980000000001, 881, 889) | ||
+ | </pre> | ||
+ | |||
+ | == ปฏิบัติการอื่นๆ ของ tuple == | ||
+ | เราสามารถหาความยาวของ tuple ได้ด้วยฟังก์ชัน <tt>len</tt> | ||
+ | <pre title="interpreter"> | ||
+ | >>> a = 1, 2, 3, 4, 5, 6, 7 | ||
+ | >>> b = 8, 9, 10 | ||
+ | >>> len(a) | ||
+ | 7 | ||
+ | >>> len(b) | ||
+ | 3 | ||
+ | </pre> | ||
+ | |||
+ | เราสามารถเอา tuple สอง tuple มาต่อกันเป็น tuple อันใหม่ ได้โดยการใช้เครื่องหมายบวก | ||
+ | <pre title="interpreter"> | ||
+ | >>> a+b | ||
+ | (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) | ||
+ | >>> b+a | ||
+ | (8, 9, 10, 1, 2, 3, 4, 5, 6, 7) | ||
+ | </pre> | ||
+ | |||
+ | และเราสามารถคูณ tuple ด้วยจำนวนเต็มได้เหมือนกับการคูณสตริงด้วยจำนวนเต็ม | ||
+ | <pre title="interpreter"> | ||
+ | >>> 2*a | ||
+ | (1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7) | ||
+ | >>> 3*b | ||
+ | (8, 9, 10, 8, 9, 10, 8, 9, 10) | ||
+ | </pre> | ||
+ | |||
+ | การสร้าง tuple ที่มีความยาวหนึ่งสามารถทำได้โดยพิมพ์ค่าค่าหนึ่งแล้วตามด้วยเครื่องหมายคอมมา (,) | ||
+ | <pre title="interpreter"> | ||
+ | >>> t = 10, | ||
+ | (10,) | ||
+ | >>> len(t) | ||
+ | 1 | ||
+ | </pre> | ||
+ | |||
+ | เราสามารถสร้าง tuple ที่ไม่มีสมาชิกอะไรอยู่ข้างในมันเลขได้เหมือนกัน โดยใช้คำสั่ง <tt>tuple()</tt> | ||
+ | <pre title="interpreter"> | ||
+ | >>> t = tuple() | ||
+ | >>> t | ||
+ | () | ||
+ | >>> len(t) | ||
+ | 0 | ||
+ | </pre> | ||
+ | {{Python Programming/Navigation|If Statements|Lists}} |
รุ่นแก้ไขปัจจุบันเมื่อ 09:16, 27 ตุลาคม 2557
Tuple เป็นโครงสร้างข้อมูลที่ทำหน้าที่คล้ายกับอะเรย์ขนาดคงที่
เราสามารถสร้าง tuple ได้โดยการนำค่าหลายๆ ค่ามาเรียงต่อกัน แล้วคั่นค่าที่ติดกันด้วยเครื่องหมายคอมมา (,)
>>> t = 42, "Misaka Mikoto", "tsunderailgun", 4649.398 >>> print t (42, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001)
เราสามารถเรียกสมาชิกแต่ละตัวของ tuple มาใช้ได้เหมือนกับการเรียกดูสมาชิกของอะเรย์ในภาษา C
>>> t[0] 42 >>> t[1] 'Misaka Mikoto' >>> t[2] 'tsunderailgun' >>> t[3] 4649.3980000000001
นอกจากนี้ในภาษาไพทอน เลขที่เราใช้เป็นดรรชนีบ่งตำแหน่งของสมาชิกใน tuple จะเป็นเลขลบก็ได้ โดยที่ t[-k] จะหมายถึงสมาชิกที่เริ่มนับจากด้านหลังของ t ไปเป็นตัวที่ k
>>> t[-1] 4649.3980000000001 >>> t[-2] 'tsunderailgun' >>> t[-3] 'Misaka Mikoto' >>> t[-4] 42
tuple มีสมบัติที่สำคัญประการหนึ่งคือเราไม่สามารถเปลี่ยนแปลงสมาชิกของมันหลังจากสร้างมันเสร็จแล้วได้ (ภาษาฝรั่งเรียกโครงสร้างข้อมูลประเภทนี้ว่า immutable data structure)
>>> t[0] = 999 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
แต่ไม่ได้หมายความว่าเราจะเปลี่ยนค่าของตัวแปรให้เป็น tuple อื่นไม่ได้
>>> t = 999, "Misaka Mikoto", "tsunderailgun", 4649.398, 881, 889 >>> print t (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001, 881, 889)
อนึ่ง เราสามารถตรวจสอบว่าค่าค่าหนึ่งอยู่ใน tuple ได้หรือไม่ด้วยเครื่องหมาย in
>>> t = 999, "Misaka Mikoto", "tsunderailgun", 4649.398, 881, 889 >>> "Misaka Mikoto" in t True >>> 888 in t False
Packing และ Unpacking
การกำหนดค่าหลาย ๆ ค่าลงในตัวแปรสามารถเรียกได้ว่าเป็นการ "แพ็ก" ข้อมูลให้เป็นทูเปิล เราสามารถกระจายข้อมูลในทูเปิล (หรือ "อันแพ็ก") ลงในตัวแปรหลายตัวพร้อม ๆ กันได้
>>> a,b,c,d,e,f = t >>> a 999 >>> c 'tsunderailgun'
เราสามารถใช้หลักการเดียวกันในการกำหนดค่าให้ตัวแปรพร้อมกันหลายตัวได้
>>> x,y,z = 10,15,2 >>> x 10 >>> y 15 >>> z 2
Slicing
Slicing คือการสร้าง tuple อีกอันหนึ่งขึ้นมาจาก tuple เดิมด้วยการดึงสมาชิกบางส่วนที่อยู่ติดกันออกมา โดยนิพจน์ที่เราใช้ในการทำ slicing จะมีรูปแบบดังนี้
<<tuple>>[ <<หมายเลขของสมาชิกตัวแรกที่ต้องการ>> : <<หมายเลขของสมาชิกที่อยู่หลังสมาชิกตัวสุดท้ายที่เราต้องการ>> ]
ยกตัวอย่าง เช่น ถ้าเราต้องการสมาชิกที่มีหมายเลข 2 ถึงสมาชิกที่มีหมายเลข 3 ของ tuple t เราจะใช้นิพจน์
>>> t[2:4] ('tsunderailgun', 4649.3980000000001)
และถ้าต้องการสมาชิกตั้งแต่ตัวที่มีหมายเลข 3 ไปจนถึงตัวที่มีหมายเลข 5 เราจะใช้นิพจน์
>>> t[3:6] (4649.3980000000001, 881, 889)
หมายเลขที่เราใส่ลงในนิพจน์สำหรับทำ slicing สามารถเ้ป็นเลขลบได้ ซึ่งถ้าเป็นเลขลบก็จะมีความหมายเหมือนกับที่กล่าวไว้แล้วข้างบน
>>> t[1:-1] ('Misaka Mikoto', 'tsunderailgun', 4649.3980000000001, 881) >>> t[-6:-2] (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001)
เราสามารถละหมายเลขที่ใส่ในนิพจน์ slicing ได้ โดยถ้าละเลขตัวหน้า หมายความว่าให้เริ่มต้นจากเลข 0 แต่ถ้าละเลขตัวหลัง หมายความว่าให้ไปจบที่ท้าย tuple
>>> t[:4] (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001)' >>> t[2:] ('tsunderailgun', 4649.3980000000001, 881, 889) >>> t[:-1] (999, 'Misaka Mikoto', 'tsunderailgun', 4649.3980000000001, 881) >>> t[-3:] (4649.3980000000001, 881, 889)
ปฏิบัติการอื่นๆ ของ tuple
เราสามารถหาความยาวของ tuple ได้ด้วยฟังก์ชัน len
>>> a = 1, 2, 3, 4, 5, 6, 7 >>> b = 8, 9, 10 >>> len(a) 7 >>> len(b) 3
เราสามารถเอา tuple สอง tuple มาต่อกันเป็น tuple อันใหม่ ได้โดยการใช้เครื่องหมายบวก
>>> a+b (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) >>> b+a (8, 9, 10, 1, 2, 3, 4, 5, 6, 7)
และเราสามารถคูณ tuple ด้วยจำนวนเต็มได้เหมือนกับการคูณสตริงด้วยจำนวนเต็ม
>>> 2*a (1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7) >>> 3*b (8, 9, 10, 8, 9, 10, 8, 9, 10)
การสร้าง tuple ที่มีความยาวหนึ่งสามารถทำได้โดยพิมพ์ค่าค่าหนึ่งแล้วตามด้วยเครื่องหมายคอมมา (,)
>>> t = 10, (10,) >>> len(t) 1
เราสามารถสร้าง tuple ที่ไม่มีสมาชิกอะไรอยู่ข้างในมันเลขได้เหมือนกัน โดยใช้คำสั่ง tuple()
>>> t = tuple() >>> t () >>> len(t) 0
หน้าก่อน: If Statements | สารบัญ | หน้าต่อไป: Lists |