Python มีประเภทลิสต์ในตัวที่ยอดเยี่ยมชื่อว่า "list" ลิเทอรัลลิสต์จะเขียนไว้ในวงเล็บเหลี่ยม [ ] ลิสต์ทํางานคล้ายกับสตริง ใช้ฟังก์ชัน len() และวงเล็บเหลี่ยม [ ] เพื่อเข้าถึงข้อมูล โดยที่องค์ประกอบแรกอยู่ที่ดัชนี 0 (ดูเอกสารประกอบเกี่ยวกับรายการของ python.org อย่างเป็นทางการ)
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
การกำหนดที่มีเครื่องหมาย = ในลิสต์จะไม่ทำสำเนา แต่การกำหนดจะทำให้ตัวแปร 2 รายการชี้ไปยังรายการเดียวในหน่วยความจำ
b = colors ## Does not copy the list
"ลิสต์ว่าง" คือคู่วงเล็บ [ ] ที่ว่างเปล่า "+" จะเพิ่มรายการ 2 รายการต่อท้าย ดังนั้น [1, 2] + [3, 4] จะได้ผลลัพธ์เป็น [1, 2, 3, 4] (เหมือนกับ + สำหรับสตริง)
FOR และ IN
โครงสร้าง *for* และ *in* ของ Python มีประโยชน์อย่างยิ่ง และการใช้งานครั้งแรกที่เราจะเห็นคือกับลิสต์ โครงสร้าง *สำหรับ* -- for var in list
-- เป็นวิธีง่ายๆ ในการดูองค์ประกอบแต่ละรายการในรายการ (หรือคอลเล็กชันอื่น) อย่าเพิ่มหรือนำออกจากรายการระหว่างการทำซ้ำ
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
หากคุณทราบว่ารายการมีข้อมูลประเภทใด ให้ใช้ชื่อตัวแปรในลูปที่บันทึกข้อมูลนั้น เช่น "num" หรือ "name" หรือ "url" เนื่องจากโค้ด Python ไม่มีไวยากรณ์อื่นๆ ที่จะเตือนคุณเกี่ยวกับประเภท ชื่อตัวแปรจึงเป็นวิธีสำคัญในการช่วยให้คุณทราบสิ่งที่เกิดขึ้น (ข้อมูลนี้ทำให้เข้าใจผิดเล็กน้อย เมื่อสัมผัสกับ Python ได้มากขึ้น คุณจะเห็นการอ้างอิงถึงการพิมพ์คำใบ้ ซึ่งช่วยให้คุณเพิ่มข้อมูลการพิมพ์ลงในคำจำกัดความของฟังก์ชันได้ Python จะไม่ใช้คำแนะนำประเภทเหล่านี้เมื่อเรียกใช้โปรแกรมของคุณ โปรแกรมอื่นๆ เช่น IDE (Integrated Development Environment) และเครื่องมือวิเคราะห์แบบคงที่ เช่น Linter/Type Checker จะใช้ไฟล์เหล่านี้เพื่อตรวจสอบว่ามีการเรียกใช้ฟังก์ชันด้วยอาร์กิวเมนต์ที่เข้ากันได้หรือไม่)
คอนสตรัคต์ *in* เพียงอย่างเดียวเป็นวิธีที่ง่ายในการทดสอบว่าองค์ประกอบปรากฏในลิสต์ (หรือคอลเล็กชันอื่นๆ) หรือไม่ -- value in collection
-- ทดสอบว่าค่าอยู่ในคอลเล็กชันหรือไม่ โดยจะแสดงผลเป็น True/False
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
โครงสร้าง for/in ใช้กันมากในโค้ด Python และใช้ได้กับประเภทข้อมูลอื่นๆ นอกเหนือจากลิสต์ คุณจึงควรจดจำไวยากรณ์ของโครงสร้างนี้ คุณอาจเคยชินกับภาษาอื่นๆ ที่เริ่มวนซ้ำคอลเล็กชันด้วยตนเอง แต่คุณควรใช้ for/in ใน Python
นอกจากนี้ คุณยังใช้ for/in เพื่อดำเนินการกับสตริงได้ด้วย สตริงจะทํางานเหมือนรายการอักขระ ดังนั้น for ch in s: print(ch)
จึงแสดงอักขระทั้งหมดในสตริง
ช่วง
ฟังก์ชัน range(n) จะแสดงผลตัวเลข 0, 1, ... n-1 และ range(a, b) จะแสดงผล a, a+1, ... b-1 จนถึงตัวเลขสุดท้าย (แต่ไม่รวม) การใช้ทั้งวงวน for และฟังก์ชัน range() จะช่วยให้คุณสร้างวงวน for แบบตัวเลขแบบดั้งเดิมได้ ดังนี้
## print the numbers from 0 through 99 for i in range(100): print(i)
มีตัวแปร xrange() ซึ่งจะช่วยประหยัดค่าใช้จ่ายในการสร้างรายการทั้งหมดสำหรับกรณีที่คำนึงถึงประสิทธิภาพ (ใน Python 3 นั้น range() จะมีลักษณะการทำงานที่มีประสิทธิภาพดีและคุณก็ไม่ต้องสนใจ xrange())
While Loop
นอกจากนี้ Python ยังมี ขณะที่ลูปมาตรฐาน ขณะที่คำสั่ง *break* และ *continue* ทำงานเหมือนกับใน C++ และ Java โดยปรับเปลี่ยนเส้นทางของลูปด้านในสุด ลูป for/in ด้านบนจะช่วยแก้ปัญหาการทำซ้ำองค์ประกอบทั้งหมดในรายการ แต่ลูป ขณะที่จะช่วยให้คุณควบคุมจำนวนดัชนีได้อย่างเต็มที่ ต่อไปนี้คือวิธีการวนซ้ำในขณะที่เข้าถึงองค์ประกอบที่ 3 ทั้งหมดในรายการ
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
แสดงรายการเมธอด
ตัวอย่างวิธีการอื่นๆ ที่ใช้กันโดยทั่วไปมีดังนี้
- list.append(elem) -- เพิ่มองค์ประกอบเดียวไว้ที่ท้ายรายการ ข้อผิดพลาดที่พบบ่อย: ไม่แสดงรายการใหม่ แต่จะแก้ไขรายการเดิมเท่านั้น
- list.insert(index, elem) -- แทรกองค์ประกอบที่ดัชนีที่ระบุ โดยระบบจะเลื่อนองค์ประกอบไปทางขวา
- item.extend(list2) จะเพิ่มองค์ประกอบใน list2 ไปยังตอนท้ายของรายการ การใช้ + หรือ += ในลิสต์จะคล้ายกับการใช้ extend()
- list.index(elem) -- ค้นหาองค์ประกอบที่กำหนดจากจุดเริ่มต้นของรายการและแสดงผลดัชนี แสดงข้อผิดพลาด ValueError หากองค์ประกอบไม่ปรากฏ (ใช้ "in" เพื่อตรวจสอบโดยไม่เกิดข้อผิดพลาด ValueError)
- item.remove(elem) -- ค้นหาอินสแตนซ์แรกขององค์ประกอบที่ระบุและนำออก (จะส่ง ValueError หากไม่มี)
- list.sort() -- จัดเรียงรายการในตำแหน่ง (ไม่แสดงผล) (แนะนำให้ใช้ฟังก์ชัน sorted() ที่แสดงในภายหลัง)
- list.reverse() -- กลับรายการในตำแหน่ง (ไม่แสดงผล)
- list.pop(index) -- นำรายการที่ดัชนีที่ระบุออกและแสดงผล แสดงองค์ประกอบด้านขวาสุดหากไม่ระบุดัชนี (ทำงานคล้ายกับ append())
โปรดทราบว่าสิ่งเหล่านี้คือ *เมธอด* ในออบเจ็กต์ลิสต์ ส่วน len() คือฟังก์ชันที่ใช้ลิสต์ (หรือสตริงหรืออะไรก็ตาม) เป็นอาร์กิวเมนต์
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
ข้อผิดพลาดที่พบบ่อย: โปรดทราบว่าเมธอดข้างต้นไม่ได้*แสดงผล*รายการที่แก้ไข แต่เป็นเพียงการแก้ไขรายการเดิม
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
สร้างรายการ
รูปแบบที่พบบ่อยอย่างหนึ่งคือการเริ่มลิสต์เป็นลิสต์ว่าง [] จากนั้นใช้ append() หรือ extend() เพื่อเพิ่มองค์ประกอบลงในลิสต์
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
แสดงรายการส่วนแบ่ง
ส่วนของข้อมูลใช้ได้กับลิสต์เช่นเดียวกับสตริง และยังใช้เพื่อเปลี่ยนส่วนย่อยของลิสต์ได้ด้วย
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
แบบฝึกหัด: list1.py
หากต้องการฝึกเนื้อหาในส่วนนี้ ให้ลองทำโจทย์ใน list1.py ที่ไม่ได้ใช้การจัดเรียง (ในแบบฝึกหัดพื้นฐาน)