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* ของ 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 (สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบผสานรวม) และ เครื่องมือวิเคราะห์แบบคงที่ เช่น โปรแกรมวิเคราะห์โค้ด/โปรแกรมตรวจสอบประเภท เพื่อตรวจสอบว่ามีการเรียกฟังก์ชันหรือไม่ ด้วยอาร์กิวเมนต์ที่เข้ากันได้)
โครงสร้าง *ใน* แบบเดี่ยวเป็นวิธีง่ายๆ ในการทดสอบว่าองค์ประกอบหนึ่งๆ ปรากฏในลิสต์ (หรือคอลเล็กชันอื่น) หรือไม่ -- value in collection
-- ทดสอบว่าค่าอยู่ในคอลเล็กชันหรือไม่ โดยแสดงค่า "จริง/เท็จ"
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
โครงสร้าง for/in มีการใช้กันโดยทั่วไปในโค้ด Python และทำงานกับประเภทข้อมูลอื่นนอกเหนือจากรายการ คุณจึงต้องจดจำไวยากรณ์ คุณอาจมีนิสัยจากภาษาอื่นๆ ที่คุณเริ่มทำซ้ำในคอลเล็กชันด้วยตนเอง ซึ่งคุณควรใช้สำหรับ/in ใน Python
นอกจากนี้คุณยังสามารถใช้ for/in เพื่อทำงานกับสตริงได้ สตริงจะทำหน้าที่เหมือนรายการอักขระ ดังนั้น for ch in s: print(ch)
จะพิมพ์อักขระทั้งหมดในสตริง
ช่วง
ฟังก์ชันช่วง(n) จะแสดงผลตัวเลข 0, 1, ... n-1 และช่วง(a, b) แสดงผล a, a+1, ... b-1 ได้สูงสุดแต่ไม่รวมตัวเลขสุดท้าย การใช้ฟังก์ชัน for-loop และrange() ร่วมกันจะช่วยให้คุณสร้างตัวเลขแบบดั้งเดิมสําหรับลูปได้
## print the numbers from 0 through 99 for i in range(100): print(i)
มีตัวแปร xrange() ที่เลี่ยงค่าใช้จ่ายในการสร้างรายการทั้งหมดสำหรับกรณีที่มีความละเอียดอ่อนด้านประสิทธิภาพ (ใน Python 3 นั้นrange() จะมีลักษณะการทำงานด้านประสิทธิภาพที่ดีและคุณอาจลืม xrange() ก็ได้)
ขณะวนซ้ำ
นอกจากนี้ Python ยังมีการทำงานแบบ ขณะที่ลูปแบบมาตรฐาน คำสั่ง *break* และ *ดำเนินการต่อ* จะทำงานเหมือนใน C++ และ Java โดยปรับเปลี่ยนเส้นทางของลูปด้านในสุด ลูป for/in ด้านบนจะช่วยแก้ปัญหาการทำซ้ำองค์ประกอบทั้งหมดในรายการ แต่ลูป ขณะที่จะช่วยให้คุณควบคุมจำนวนดัชนีได้อย่างเต็มที่ ต่อไปนี้เป็นขณะเล่นวนซ้ำซึ่งเข้าถึงองค์ประกอบที่ 3 ทั้งหมดในรายการ
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
แสดงรายการเมธอด
ต่อไปนี้คือวิธีรายการอื่นๆ ที่ใช้กันโดยทั่วไป
- item.append(elem) -- เพิ่มองค์ประกอบเดียวลงท้ายรายการ ข้อผิดพลาดที่พบบ่อย: ไม่แสดงรายการใหม่ แต่แก้ไขรายการเดิมเท่านั้น
- item.insert(index, elem) -- แทรกองค์ประกอบที่ดัชนีที่ระบุโดยย้ายองค์ประกอบไปทางขวา
- item.extend(list2) จะเพิ่มองค์ประกอบใน list2 ไปยังตอนท้ายของรายการ การใช้ + หรือ += ในรายการจะคล้ายกับการใช้expand()
- list.index(elem) -- ค้นหาองค์ประกอบที่กำหนดจากจุดเริ่มต้นของรายการและแสดงผลดัชนี ส่ง ValueError หากองค์ประกอบไม่ปรากฏขึ้น (ใช้ "in" เพื่อตรวจสอบโดยไม่มี ValueError)
- list.remove(elem) -- ค้นหาอินสแตนซ์แรกขององค์ประกอบที่ระบุและลบออก (จะส่ง ValueError หากไม่มี)
- list.sort() -- จัดเรียงรายการในตำแหน่ง (โดยไม่แสดงผล) (แนะนำให้ใช้ฟังก์ชัน Sort() ที่แสดงไว้ในภายหลัง)
- list.reverse() -- กลับรายการที่กำหนดไว้ (ไม่ส่งคืนรายการ)
- item.pop(index) -- ลบและแสดงผลองค์ประกอบที่ดัชนีที่ระบุ แสดงผลองค์ประกอบด้านขวาสุดหากละเว้นดัชนี (โดยคร่าวๆ ตรงข้ามกับ append())
โปรดสังเกตว่านี่คือ *methods* ในออบเจ็กต์รายการ ขณะที่ 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() หรือขยาย() เพื่อเพิ่มองค์ประกอบลงไป
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 ที่ไม่ได้ใช้การจัดเรียง (ในแบบฝึกหัดพื้นฐาน)