ลิสต์ใน Python: สร้าง เข้าถึง แก้ไข และวนลูปลิสต์
บทเรียนนี้แปลจากต้นฉบับภาษาอังกฤษRead in EnglishLeer en españolЧитать на русскомLer em portuguêsแจ้งข้อผิดพลาดในการแปล
ลองนึกถึงเพลย์ลิสต์เพลงโปรดของคุณ เพลย์ลิสต์มีเพลงหลายเพลงเรียงตามลำดับที่แน่นอน คุณเพิ่มเพลงใหม่ ลบเพลงเก่า สลับลำดับ หรือข้ามไปเพลงที่ห้าได้
ลิสต์ (list) ใน Python ทำงานแบบเดียวกันเลย ลิสต์คือกลุ่มข้อมูลที่เรียงตามลำดับและเปลี่ยนแปลงได้ทุกเมื่อที่ต้องการ รายการซื้อของ ชื่อนักเรียน คะแนนสูงสุด สีของพิกเซล ลิสต์เป็นหนึ่งในเครื่องมือที่มีประโยชน์ที่สุดใน Python
ในบทเรียนนี้ คุณจะได้เรียนวิธีสร้างลิสต์ เข้าถึงสมาชิกตามตำแหน่ง เพิ่มและลบสมาชิก วนลูปผ่านลิสต์ ตัดช่วงลิสต์ และหลีกเลี่ยงข้อผิดพลาดที่มือใหม่มักทำบ่อยที่สุด
วิธีสร้างลิสต์ใน Python
สร้างลิสต์ได้โดยใส่สมาชิกไว้ใน วงเล็บเหลี่ยม [] แล้วคั่นแต่ละตัวด้วยเครื่องหมายจุลภาค (comma) สมาชิกแต่ละตัวเป็นชนิดใดก็ได้ ทั้งสตริง ตัวเลข ค่าความจริง หรือแม้แต่ลิสต์อื่น
['apple', 'banana', 'cherry'] [95, 87, 72, 100, 68] ['Alice', 15, True, 3.14]
สมาชิกแต่ละตัวในลิสต์มีตำแหน่งที่เรียกว่า ดัชนี (index) สมาชิกตัวแรกอยู่ที่ดัชนี 0 ตัวที่สองอยู่ที่ดัชนี 1 ต่อไปเรื่อย ๆ กฎ "เริ่มนับจากศูนย์" นี้ใช้เหมือนกันในภาษาโปรแกรมเกือบทุกภาษา
คุณยังสร้างลิสต์ว่างไว้ก่อน แล้วค่อยเพิ่มสมาชิกทีหลังได้ด้วย วิธีนี้ใช้บ่อยเมื่อยังไม่รู้ล่วงหน้าว่าลิสต์จะมีอะไรบ้าง
[] [] ['h', 'e', 'l', 'l', 'o']
วิธีเข้าถึงสมาชิกในลิสต์ด้วยดัชนีใน Python
ถ้าต้องการหยิบสมาชิกตัวเดียวจากลิสต์ ให้ใส่หมายเลขดัชนีไว้ในวงเล็บเหลี่ยมต่อท้ายชื่อลิสต์ อย่าลืมว่าดัชนีเริ่มที่ 0 ไม่ใช่ 1
red green purple
Python ยังรองรับ ดัชนีติดลบ (negative indexing) ซึ่งนับจากท้ายลิสต์ -1 คือสมาชิกตัวสุดท้าย -2 คือตัวรองสุดท้าย ต่อไปเรื่อย ๆ
purple yellow red
ดัชนีติดลบสะดวกมากเมื่อต้องการสมาชิกตัวสุดท้ายแต่ไม่รู้ว่าลิสต์ยาวเท่าไร my_list[-1] ให้สมาชิกตัวสุดท้ายเสมอ
3 blue
วิธีแก้ไขลิสต์ใน Python
ลิสต์ เปลี่ยนแปลงได้ (mutable) หมายความว่าแก้ไขได้หลังจากสร้างแล้ว คุณเปลี่ยนสมาชิกทีละตัว เพิ่มสมาชิกใหม่ หรือรวมลิสต์เข้าด้วยกันได้
เปลี่ยนสมาชิกด้วยดัชนี
ถ้าต้องการแทนที่สมาชิกตัวใดตัวหนึ่ง ให้กำหนดค่าใหม่ให้กับดัชนีนั้น ค่าเดิมจะถูกเขียนทับทั้งหมด
['apple', 'banana', 'cherry'] ['apple', 'mango', 'cherry']
เพิ่มสมาชิกด้วย append(), insert() และ extend()
Python มีวิธีเพิ่มสมาชิกลงในลิสต์สามวิธี แต่ละวิธีทำงานต่างกันเล็กน้อย
['milk', 'eggs', 'bread'] ['milk', 'butter', 'eggs', 'bread'] ['milk', 'butter', 'eggs', 'bread', 'cheese', 'juice']
a = [1, 2, 3]
a.append([4, 5])
print(a) # [1, 2, 3, [4, 5]]a = [1, 2, 3]
a.extend([4, 5])
print(a) # [1, 2, 3, 4, 5]วิธีลบสมาชิกออกจากลิสต์ใน Python
เช่นเดียวกับการเพิ่มสมาชิก Python มีหลายวิธีในการลบสมาชิก วิธีที่เหมาะขึ้นอยู่กับว่าคุณรู้ค่าหรือรู้ตำแหน่ง
['cat', 'fish', 'hamster', 'dog'] fish ['cat', 'hamster', 'dog'] dog ['cat', 'hamster']
remove() ค้นหาค่าที่ระบุแล้วลบตัวแรกที่เจอ ถ้าไม่มีค่านั้นในลิสต์ Python จะแจ้งข้อผิดพลาด ValueError
pop() ลบตามตำแหน่งและคืนค่าสมาชิกที่ลบออกมาให้ วิธีนี้มีประโยชน์เมื่อต้องใช้สมาชิกนั้นต่อหลังจากลบแล้ว เหมือนการแจกไพ่จากสำรับ
[20, 30, 40, 50] []
วิธีวนลูปผ่านลิสต์ใน Python
สิ่งที่ทรงพลังที่สุดอย่างหนึ่งที่ทำกับลิสต์ได้คือการ วนลูป (loop) ผ่านลิสต์ คือรันโค้ดชุดเดิมหนึ่งครั้งต่อสมาชิกหนึ่งตัว นี่คือวิธีจัดการข้อมูลร้อยตัวโดยไม่ต้องเขียนโค้ดร้อยบรรทัด
apple banana cherry
อ่านโค้ดนี้ว่า "สำหรับผลไม้แต่ละอย่างในลิสต์ fruits ให้แสดงผลไม้นั้น" Python หยิบสมาชิกตัวแรก รันโค้ดที่เยื้องไว้ หยิบตัวถัดไป รันอีกครั้ง ทำแบบนี้ไปเรื่อย ๆ จนครบทุกตัวในลิสต์
บางครั้งคุณต้องการ หมายเลขดัชนี พร้อมกับตัวสมาชิกด้วย ฟังก์ชัน enumerate() ให้ทั้งสองอย่าง
0: apple 1: banana 2: cherry
คุณยังวนลูปด้วยช่วงของหมายเลขดัชนีได้ด้วย วิธีนี้มีประโยชน์เมื่อต้องเปรียบเทียบหรือแก้ไขสมาชิกตามตำแหน่ง
Student 1: 85 Student 2: 92 Student 3: 78 Student 4: 95 Student 5: 88
วิธีตรวจว่ามีสมาชิกอยู่ในลิสต์ Python หรือไม่
คีย์เวิร์ด in ใช้ตรวจว่ามีค่านั้นอยู่ในลิสต์หรือไม่ ผลลัพธ์คือ True หรือ False
True False Green is in the list! Purple is NOT in the list.
วิธีนี้อ่านง่ายกว่าการเขียนลูปค้นหาค่าเองมาก ใช้ in ได้ทุกครั้งที่ต้องการตรวจว่ามีสิ่งใดอยู่ในลิสต์หรือไม่
การตัดช่วงลิสต์ (slicing) ใน Python
การตัดช่วง (slicing) ช่วยให้หยิบ บางส่วน ของลิสต์ได้ แทนที่จะหยิบแค่ตัวเดียว รูปแบบคือ list[start:end] โดยรวม start แต่ ไม่ รวม end
['b', 'c', 'd'] ['a', 'b', 'c'] ['d', 'e', 'f'] ['a', 'b', 'c', 'd', 'e', 'f']
กฎ "ไม่รวมตัวท้าย" อาจดูแปลกในตอนแรก แต่มีข้อดีอยู่ letters[:3] ให้สมาชิก 3 ตัวพอดี และ letters[3:] ให้ส่วนที่เหลือทั้งหมด ไม่ต้องสับสนว่านับเกินหรือขาดไปหนึ่งตัว
คุณเพิ่มตัวเลขตัวที่สามที่เรียกว่า ระยะก้าว (step) ได้ ตัวเลขนี้บอก Python ว่าจะขยับไปไกลแค่ไหนในการหยิบแต่ละครั้ง: ระยะก้าว 2 จะหยิบสมาชิกเว้นตัว
[0, 2, 4, 6, 8] [0, 3, 6, 9] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
เมธอดของลิสต์ใน Python ที่ใช้บ่อย
ลิสต์ใน Python มีเมธอดในตัวมากมาย ต่อไปนี้คือเมธอดที่คุณจะใช้บ่อยที่สุด
[1, 1, 2, 3, 4, 5, 6, 9] [9, 6, 5, 4, 3, 2, 1, 1] 2
5 78 95 438 Average: 87.6
ข้อผิดพลาดที่พบบ่อยเกี่ยวกับลิสต์ใน Python
ลิสต์มีพฤติกรรมบางอย่างที่ชวนสับสนและทำให้มือใหม่แทบทุกคนพลาด ถ้าเข้าใจตั้งแต่ตอนนี้ จะประหยัดเวลาดีบักไปได้หลายชั่วโมงในภายหลัง
[1, 2, 3, 4] [1, 2, 3, 4]
[1, 2, 3] [1, 2, 3, 4]
a = [1, 2, 3]
b = a # b IS a
b.append(4)
print(a) # [1, 2, 3, 4]a = [1, 2, 3]
b = a[:] # b is a COPY of a
b.append(4)
print(a) # [1, 2, 3]แบบฝึกหัด
ได้เวลาฝึกแล้ว แบบฝึกหัดเหล่านี้ต่อยอดกันไปทีละข้อ จากพื้นฐานไปจนถึงข้อที่ท้าทายขึ้น ลองทำแต่ละข้อด้วยตัวเองก่อนเปิดดูคำใบ้
สร้างลิสต์ชื่อ animals ที่มีสตริงสามตัวนี้: "cat", "dog", "rabbit"
จากนั้นแสดงความยาวของลิสต์ในรูปแบบนี้ให้ตรงทุกตัวอักษร:
3มีลิสต์ชื่อเมืองให้มาแล้ว ใช้ ดัชนีติดลบ เพื่อแสดงชื่อเมืองสุดท้ายในลิสต์
ผลลัพธ์ที่ต้องได้:
Tokyoคุณมีรายการซื้อของอยู่หนึ่งลิสต์ ให้ทำตามขั้นตอนต่อไปนี้ ตามลำดับ:
1. เพิ่ม "bread" ต่อท้ายลิสต์
2. ลบ "milk" ออกจากลิสต์
3. แสดงลิสต์สุดท้าย
ผลลัพธ์ที่ต้องได้:
['eggs', 'cheese', 'butter', 'bread']โค้ดนี้พยายามแสดงสีสุดท้ายในลิสต์ แต่กลับหยุดทำงานด้วย IndexError แก้บั๊กให้โปรแกรมแสดงผล:
purpleคำใบ้: ลิสต์มีสมาชิก 4 ตัว ดัชนีที่ใช้ได้มีอะไรบ้าง
เขียนโปรแกรมหาผลรวมของตัวเลขทั้งหมดในลิสต์ด้วยลูป for ห้าม ใช้ฟังก์ชันในตัว sum()
ผลลัพธ์ที่ต้องได้:
150หาตัวเลขที่มากที่สุดในลิสต์ด้วยลูป for ห้าม ใช้ฟังก์ชันในตัว max()
ผลลัพธ์ที่ต้องได้:
95อ่านโค้ดนี้อย่างละเอียดแล้วทายว่าจะแสดงผลอะไร ลองคิดว่าจะเกิดอะไรขึ้นเมื่อตัวแปรสองตัวชี้ไปที่ลิสต์เดียวกัน
พิมพ์ผลลัพธ์ให้ตรงทุกตัวอักษร (ถ้ามี print หลายครั้ง ให้แต่ละค่าอยู่คนละบรรทัด)
กลับลำดับลิสต์ที่ให้มาด้วยลูป ห้าม ใช้ reverse(), reversed() หรือ [::-1]
ผลลัพธ์ที่ต้องได้:
[5, 4, 3, 2, 1]สรุป: สิ่งที่ได้เรียนรู้เกี่ยวกับลิสต์ใน Python
เยี่ยมมากที่เรียนมาจนจบบทเรียนนี้ สรุปทุกอย่างที่คุณรู้แล้วมีดังนี้:
| แนวคิด | ทำอะไร | ตัวอย่าง |
|---|---|---|
| สร้างลิสต์ | เก็บข้อมูลตามลำดับ | fruits = ["a", "b"] |
| เข้าถึงด้วยดัชนี | หยิบสมาชิกหนึ่งตัว | fruits[0], fruits[-1] |
| แก้ไขสมาชิก | เปลี่ยนค่า | fruits[0] = "cherry" |
append() | เพิ่มต่อท้าย | fruits.append("date") |
insert() | เพิ่มที่ตำแหน่งที่ระบุ | fruits.insert(1, "fig") |
remove() | ลบตามค่า | fruits.remove("a") |
pop() | ลบตามดัชนี | fruits.pop(0) |
ลูป for | ทำงานกับสมาชิกทีละตัว | for f in fruits: |
in / not in | ตรวจว่าเป็นสมาชิกหรือไม่ | "a" in fruits |
| การตัดช่วง | หยิบบางส่วน | fruits[1:3] |
sort() / reverse() | จัดลำดับสมาชิกใหม่ | fruits.sort() |
len() / sum() | นับจำนวนหรือหาผลรวม | len(fruits) |
ลิสต์เป็นโครงสร้างข้อมูลที่ใช้บ่อยที่สุดอย่างหนึ่งใน Python โปรแกรมจริงแทบทุกโปรแกรมใช้ลิสต์ ตั้งแต่เว็บแอป งานวิทยาการข้อมูล ไปจนถึงการพัฒนาเกม
บทเรียนถัดไป
ในบทเรียนถัดไป List Comprehension ใน Python คุณจะได้เรียนทางลัดที่ทรงพลังสำหรับสร้างและแปลงลิสต์ในโค้ดบรรทัดเดียว
คุณจะได้เห็นวิธีย่อโค้ดลูป 4 บรรทัดให้เหลือบรรทัดเดียวที่อ่านง่าย และเรียนรู้ว่าเมื่อไรควรใช้ comprehension และเมื่อไรลูปธรรมดาเหมาะกว่า