เมื่อจบหัวข้อนี้ ผู้เรียนควรจะ
√ CLO2: เลือกใช้ตัวแปร ชนิดข้อมูล คำสั่งเงื่อนไข คำสั่งทำซ้ำ และไลบรารีมาตรฐานในการเขียนโปรแกรมได้อย่างเหมาะสม
อธิบายลักษณะข้อมูลลิสต์ และระบุตำแหน่งข้อมูลในลิสต์ได้โดยใช้ index
ออกแบบการเก็บข้อมูลในลิสต์ เพื่อให้เหมาะกับโจทย์ที่กำหนด
√ CLO4: เขียนโปรแกรมเพื่อประมวลผลกับข้อมูลได้
สร้าง เข้าถึง และแก้ไขข้อมูลในลิสต์
ใช้งาน function และ method สำหรับลิสต์
การวนลูปกับข้อมูลในลิสต์
สร้างลิสต์ โดยใช้ list comprehension
√ CLO5: เขียนโปรแกรมเพื่อแก้ปัญหาทางด้านคณิตศาสตร์ สถิติ และปัญหาในชีวิตประจำวัน
ยกตัวอย่างปัญหาที่พบในชีวิตประจำวันที่นำลิสต์มาใช้งาน
เขียนโปรแกรมเพื่อแก้ปัญหาโจทย์โดยประยุกต์ใช้ลิสต์
√ CLO6: ทดสอบโปรแกรม ค้นหาจุดบกพร่อง และแก้ไขให้โปรแกรมทำงานถูกต้อง
ทดสอบโปรแกรมสำหรับโจทย์ปัญหาที่มีการใช้ลิสต์
ค้นหาจุดบกพร่อง (bug) และแก้ไข (debug) ที่เกิดจากการใช้งานลิสต์
ลิสต์ (List) หรือรายการ เป็นชนิดข้อมูลแบบมีโครงสร้าง จัดเก็บข้อมูลได้หลายค่า ข้อมูลแต่ละตัวในลิสต์เป็นชนิดข้อมูลใดก็ได้ และใช้ดัชนี (index) ระบุตำแหน่งของข้อมูล ลิสต์เป็นชนิดข้อมูลที่สามารถแก้ไขค่าได้ (mutable)
ลิสต์เขียนภายในเครื่องหมาย [ ] คั่นข้อมูลแต่ละตัวด้วยเครื่องหมาย ","
รูปแบบคำสั่ง
list_name = [value1, value2, ..., valueN]
หากไม่มีข้อมูลในลิสต์ จะเรียกว่าลิสต์ว่าง (empty list)
ตัวอย่างการสร้างลิสต์
list1 = [] # empty list
list2 = list() # empty list
list3 = [1, 2, 3, 4, 5]
list4 = ['Python', 'C', 'Java']
list5 = [ 1, 'abc', 1.23, (3+4j), True] # mix datatypes
list6 = list('test') # ['t', 'e', 's', 't']
list7 = list(range(1, 10, 2)) # [1, 3, 5, 7, 9]
list8 = [1,2,3] + [4,5,6] # [1, 2, 3, 4, 5, 6]
list9 = [0] * 3 # [0, 0, 0]
list() เป็นฟังก์ชันที่ใช้สร้างลิสต์ หรือแปลงชนิดข้อมูลอื่นให้เป็นลิสต์
operater + ใช้ในการรวมสองลิสต์เข้าด้วยกัน
operator * x ใช้ในการสร้างสมาชิกในลิสต์ซ้ำกันจำนวน x ครั้ง
ระบบตะกร้าสินค้าในการซื้อของผ่านเว็บ สามารถเพิ่มลดสินค้าในตระกร้าได้ รวมราคาสินค้าทั้งหมด
basket = [ ("banana", 5), ("fish balls", 10)]
ระบบการจองโต๊ะในร้านอาหาร เก็บสถานะการจองแต่ละโต๊ะ
table_status = [True, False, True, True]
การจัดการรายการงานที่ต้องทำในแต่ละวัน แก้ไขงานที่ต้องทำได้
to_do_list = ["ซื้อผลไม้", "เขียนโปรแกรม", "สอนพิเศษ", "ออกกำลังกาย"]
คะแนนของนักเรียน จัดเก็บคะแนน คำนวณหาสถิติของคะแนน
student_scores = [85, 92, 78, 88, 95]
ลิสต์เป็นชนิดข้อมูลที่มีลำดับ ข้อมูลแต่ละตัวมีเลขระบุตำแหน่งเรียกว่า ดัชนี (index)
ลำดับของสมาชิกในลิสต์นับได้ 2 รูปแบบ คือ
positive index จากซ้ายไปขวา เริ่มต้นที่เลข 0, 1, ... ไปเรื่อยๆ
negative index จากขวาไปซ้าย เริ่มต้นที่เลข -1, -2, ... ไปเรื่อยๆ
การอ้างถึงสมาชิกแต่ละตัวในลิสต์ได้โดยระบุชื่อตัวแปรและ index
รูปแบบคำสั่ง
list_name[index]
การอ้างถึงนี้สามารถใช้ในการเข้าถึงข้อมูลหรือแก้ไขข้อมูลในลิสต์ก็ได้
ตัวอย่าง list_index1.py
# change item at index 2
languages[2] = "C"
print(languages)
# output ["Python", "Swift", "C"]
ตัวอย่าง list_index1.py
languages = ["Python", "Swift", "C++"]
print(languages)
# output ["Python", "Swift", "C++"]
# access item at index 0 or -3
print(languages[0]) # Python
print(languages[-3]) # Python
# access item at index 2 or -1
print(languages[2]) # C++
print(languages[-1]) # C++
แบบฝึกหัด
❓ระบุ positive index และ negative index ของผลลัพธ์ต่อไปนี้
ตัวอย่าง list_index2.py
trigo = ["sin", "cos", "tan", "sec", "cot"]
print(trigo[...]) # sec
print(trigo[...]) # cos
print(trigo[...]) # sin
print(trigo[...]) # cot
❓ หาผลลัพธ์ของคำสั่งต่อไปนี้
ตัวอย่าง list_index2.py
numbers = [1, 2, 3, 4, 5]
print(numbers[-1])
print(numbers[-2])
print(numbers[-5])
print(numbers[-7])
การอ้างถึงสมาชิกหลายตัวในลิสต์ทำได้โดยใช้รูปแบบ slicing [:]
รูปแบบคำสั่ง
list_name[start: end+1: step]
โดย
start เป็น index เริ่มต้น
end เป็น index ตำแหน่งสุดท้าย
step เป็นจำนวนสมาชิกที่ต้องการข้ามไปในแต่ละครั้ง
ตัวอย่าง list_slicing.py
string = "ABCDEFGHIJ"
letters = list(string)
print(letters)
print(letters[2:5]) # ['C','D','E']
print(letters[:3]) # ['A','B','C']
print(letters[7:]) # ['H','I','J']
print(letters[::3]) # ['A', 'D', 'G', 'J']
letters[::-1]
# ['J','I','H','G','F','E','D','C','B', 'A']
💡 ถ้าต้องการแสดงผลจากหลังไปหน้า ใช้คำสั่ง list_name[::-1]
ตัวอย่าง list slicing เพิ่มเติม
แบบฝึกหัด
❓ระบุ slicing ของผลลัพธ์ต่อไปนี้
ตัวอย่าง list_slicing.py
trigo = ["sin", "cos", "tan", "sec", "cot"]
print(trigo[...]) # ["cos", "tan", "sec"]
print(trigo[...]) # ["sec", "cot"]
print(trigo[...]) # ["sin", "cos"]
print(trigo[...]) # ["sin", "tan", "cot"]
❓ หาผลลัพธ์ของคำสั่งต่อไปนี้
ตัวอย่าง list_slicing.py
numbers = [1, 2, 3, 4, 5]
print(numbers[:3])
print(numbers[-3:])
print(numbers[1:4])
print(numbers[-5:-2])
สรุปรวมตัวดำเนินการกับลิสต์
Indexing อ้างถึงสมาชิกในลิสต์แต่ละตัว
Slicing อ้างถึงสมาชิกในลิสต์หลายตัว
Concatenation รวมลิสต์เข้าด้วยกัน
Repetitions สร้างสมาชิกในลิสต์ซ้ำ
Updating แก้ไขข้อมูลในลิสต์
Membership ตรวจสอบว่ามีข้อมูลในลิสต์หรือไม่
Comparison เปรียบเทียบลิสต์
ตัวอย่างการตรวจสอบว่าเป็นสมาชิกในลิสต์หรือไม่
# Check for presence
L = ['red', 'green', 'blue']
if 'red' in L:
print('yes')
# Check for absence
L = ['red', 'green', 'blue']
if 'yellow' not in L:
print('yes')
ลิสต์มาพร้อมกับ function และ method ที่ช่วยจัดการข้อมูลในลิสต์
method คือ function ที่ต้องเรียกใช้ตามหลังชื่อตัวแปร
รูปแบบการเรียกใช้ method
variable_name.method()
ดูตัวอย่างเพิ่มเติมได้ที่ https://docs.python.org/3/tutorial/datastructures.html
sum(list) ใช้หาผลรวมของลิสต์ได้ กรณีที่สมาชิกทุกตัวเป็นตัวเลข
ตัวอย่าง การวนอ่านข้อมูลเพื่อเก็บไว้ในลิสต์
n = int(input('Input n: '))
data = []
for i in range(n):
data.append(float(input()))
print('Data =',data)
Output
Input n: 4
34.4
20.9
12.5
9.56
Data = [34.4, 20.9, 12.5, 9.56]
การวนซ้ำกับข้อมูลในลิสต์ใช้ได้ทั้ง loop for และ loop while แต่นิยมใช้ร่วมกับ loop for มากกว่า
ตัวอย่างการวนซ้ำโดยใช้ loop for
colors = ['red', 'green', 'blue']
for color in colors:
print(color)
Output
red
green
blue
ตัวอย่างการวนซ้ำเพื่อแก้ไขค่าในลิสต์
# Loop through the list and double each item
nums = [1, 2, 3, 4]
for i in range(len(nums)):
nums[i] = nums[i] * 2
print(nums)
Output
[2, 4, 6, 8]
ในกรณีที่ต้องการแก้ไขค่าของสมาชิกในลิสต์ ต้องใช้ร่วมกับ range() และกำหนดค่าให้สมาชิกโดยใช้การอ้างถึงด้วย index ดังตัวอย่างนี้
เป็นวิธีการสร้างลิสต์ภายในคำสั่งเดียว โดยใช้ loop for ร่วมกับนิพจน์ที่ต้องการกำหนดค่าให้กับสมาชิกในลิสต์
ตัวอย่าง การสร้าง list โดยใช้ append และ list comprehension
exp2 = []
for x in range(5):
exp2.append(x**2)
print(exp2)
# Output: [0, 1, 4, 9, 16]
exp2 = [x**2 for x in range(5)]
print(exp2)
# Output: [0, 1, 4, 9, 16]
ตัวอย่าง list_compre1.py
triple = []
for ch in 'red':
triple.append(ch * 3)
print(triple)
list comprehension
triple = [ch * 3 for ch in 'red']
print(triple)
# Output: ['rrr', 'eee', 'ddd']
ตัวอย่าง list_compre2.py
nums= []
for num in input().split():
nums.append(int(num))
print(nums)
list comprehension
nums = [int(num) for num in input().split()]
print(nums)
# Output: list of interger numbers from user
ตัวอย่าง list_compre3.py
vector = [-4, -2, 0, 2, 4]
pos_nums = []
for x in vector:
if x >= 0:
pos_nums.append(x)
print(pos_nums)
list comprehension
pos_nums = [x for x in vector if x >= 0]
print(pos_nums)
# Output: [0, 2, 4]
ตัวอย่างปัญหาในชีวิตประจำวัน
โจทย์ รายการสินค้าในรถเข็นซื้อของ
นักศึกษากำลังซื้อของในร้านขายของออนไลน์สัปดาห์หน้าและต้องการเตรียมรายการสินค้าที่ต้องการซื้อในร้าน จงเขียนโปรแกรมที่ช่วยให้เพิ่มและลบสินค้าจากรายการสินค้าในรถเข็น รวมถึงแสดงรายการสินค้าที่ต้องการซื้อทั้งหมด
# สร้าง List ว่างสำหรับรายการสินค้า
shopping_cart = []
# เพิ่มสินค้าเข้าไปในรายการสินค้า
def add_to_cart(item):
shopping_cart.append(item)
print("%s ถูกเพิ่มในรถเข็น" % item)
# ลบสินค้าออกจากรายการสินค้า
def remove_from_cart(item):
if item in shopping_cart:
shopping_cart.remove(item)
print("%s ถูกลบออกจากรถเข็น" % item)
else:
print("%s ไม่มีในรถเข็น" % item)
# แสดงรายการสินค้าในรถเข็น
def show_shopping_cart():
print("รายการสินค้าในรถเข็น:")
for item in shopping_cart:
print(item)
# เรียกใช้งานฟังก์ชันเพื่อจัดการรายการสินค้า
add_to_cart("กล้วย")
add_to_cart("นม")
add_to_cart("ผัก")
show_shopping_cart()
remove_from_cart("นม")
show_shopping_cart()
Output
กล้วย ถูกเพิ่มในรถเข็น
นม ถูกเพิ่มในรถเข็น
ผัก ถูกเพิ่มในรถเข็น
รายการสินค้าในรถเข็น:
กล้วย
นม
ผัก
นม ถูกลบออกจากรถเข็น
รายการสินค้าในรถเข็น:
กล้วย
ผัก
ลองเขียนโปรแกรมต่อไปนี้บนเกรดเดอร์
ตัวอย่างโจทย์ระดับง่าย
storeList รับข้อมูลเก็บในลิสต์
loopList วนแสดงผลข้อมูลในลิสต์
reversePrint พิมพ์ลิสต์ถอยหลัง
ตัวอย่างโจทย์ระดับกลาง
factorNumber เลขที่มี x เป็นตัวประกอบ
NumberOccurence แสดงตำแหน่งเลขที่ต้องการค้นหา
NumArrange พิมพ์เลขตามรูปแบบที่กำหนด
AvgXY หาค่าเฉลี่ยของเลขที่มีค่าระหว่าง X และ Y ในอาเรย์
TeamCompetition หาทีมผู้ชนะ
ตัวอย่างโจทย์ระดับยาก
NumberListing
Vote
Close2Avg