ผลต่างระหว่างรุ่นของ "Python Programming/Tuples"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 14 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน)
แถว 40: แถว 40:
 
</pre>
 
</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}}
 
{{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