2.7. รายการ¶
รายการ คือลำดับค่าที่เปลี่ยนแปลงได้และเรียงลำดับแล้ว ต่างจากสตริงและไบต์ รายการสามารถเก็บค่าประเภทใดก็ได้ และคุณสามารถเปลี่ยนแปลง เพิ่ม หรือลบรายการในที่เดียวกันได้
2.7.1. การสร้างรายการ¶
วงเล็บเหลี่ยมสร้างลิเทอรัลรายการ:
empty = []
nums = [1, 2, 3]
mixed = [1, "two", 3.0, True, None] # any types
nested = [[1, 2], [3, 4], [5, 6]] # lists of lists
ตัวสร้าง list สร้างรายการจาก iterable ใดก็ได้:
>>> list("abc")
['a', 'b', 'c']
>>> list(range(5))
[0, 1, 2, 3, 4]
2.7.2. ความยาว การจัดทำดัชนี และการแบ่งส่วน¶
len() คืนค่าจำนวนรายการ การจัดทำดัชนีและการแบ่งส่วนทำงานเช่นเดียวกับสตริง ตำแหน่งเริ่มต้นที่ 0 ดัชนีลบนับจากท้าย และส่วนที่อยู่นอกช่วงที่ถูกต้องจะถูกตัดโดยไม่เกิดข้อผิดพลาด:
>>> nums = [10, 20, 30, 40, 50]
>>> len(nums)
5
>>> nums[0]
10
>>> nums[-1]
50
>>> nums[1:4]
[20, 30, 40]
ดัชนีบวกนับจากต้น ดัชนีลบนับจากท้าย¶
ไวยากรณ์การแบ่งส่วนเป็นชวเลขสำหรับออบเจกต์ slice ที่ Python สร้างเบื้องหลัง nums[1:4] เหมือนกับ nums[slice(1, 4)] คุณแทบไม่ต้องสร้างมันด้วยมือ แต่ slice() มีประโยชน์บางครั้งสำหรับเก็บการแบ่งส่วนเป็นค่าเพื่อนำมาใช้ซ้ำ:
head = slice(0, 3)
print(nums[head]) # [10, 20, 30]
print(letters[head]) # first three letters, same slice
2.7.3. การแก้ไขรายการ¶
รายการรองรับการกำหนดค่าด้วยดัชนีและการแบ่งส่วนในที่เดียวกัน:
>>> nums = [10, 20, 30]
>>> nums[0] = 99
>>> nums
[99, 20, 30]
>>> nums[1:3] = [200, 300, 400] # slice can change the length
>>> nums
[99, 200, 300, 400]
เมธอดรายการที่พบบ่อยที่สุด:
list.append()-- เพิ่มรายการเดียวไปที่ท้ายlist.extend()-- ต่อท้ายทุกรายการจาก iterablelist.insert()-- แทรกที่ตำแหน่งที่กำหนดlist.remove()-- ลบการปรากฏครั้งแรกของค่าlist.pop()-- ลบและคืนรายการ (ท้ายสุดโดยค่าเริ่มต้น)list.clear()-- ลบทุกรายการออกlist.sort()-- เรียงลำดับในที่เดียวกัน ส่งreverse=Trueสำหรับลำดับจากมากไปน้อยlist.reverse()-- กลับลำดับในที่เดียวกัน
>>> nums = []
>>> nums.append(1)
>>> nums.extend([2, 3])
>>> nums.insert(0, 99)
>>> nums
[99, 1, 2, 3]
>>> nums.pop()
3
>>> nums.sort()
>>> nums
[1, 2, 99]
เมธอดเหล่านี้แก้ไขรายการในที่เดียวกันและคืนค่า None การเขียน
nums = nums.sort() # nums is now None -- common bug
แทบไม่ใช่สิ่งที่คุณต้องการ nums เดิมถูกเรียงลำดับแล้ว แต่การกำหนดค่าจะเขียนทับชื่อด้วยค่าที่ส่งกลับมา ควรเรียก nums.sort() บนบรรทัดของตัวเอง หรือใช้ sorted() ในตัวเพื่อได้รายการที่เรียงลำดับใหม่โดยไม่แก้ไขของเดิม
2.7.4. ตัวดำเนินการ¶
+เชื่อมสองรายการเข้าเป็นรายการใหม่*ทำซ้ำรายการinทดสอบการเป็นสมาชิก
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> [0] * 5
[0, 0, 0, 0, 0]
>>> 3 in [1, 2, 3]
True
2.7.5. การวนซ้ำรายการ¶
ลูป for เดินผ่านรายการตามลำดับ:
for n in [10, 20, 30]:
print(n)
2.7.6. นามแฝงและการแก้ไข¶
รายการเป็นค่าเดียวในหน่วยความจำ หลายชื่อสามารถชี้ไปที่รายการเดียวกันได้ การแก้ไขผ่านชื่อหนึ่งจะมองเห็นได้ผ่านทุกชื่ออื่นที่ชี้ไปที่รายการเดียวกัน
a และ b ทั้งคู่ชี้ไปที่รายการเดียวกัน การแก้ไขผ่านชื่อใดก็ตามจะเปลี่ยนสิ่งที่ชื่ออื่นทุกชื่อมองเห็น¶
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> b
[1, 2, 3, 4] # same object, change is visible
หากต้องการสำเนาอิสระ ให้แบ่งส่วนรายการทั้งหมดหรือเรียกตัวสร้าง list:
>>> c = a[:] # or list(a)
>>> a.append(5)
>>> c
[1, 2, 3, 4] # c is unaffected
การดำเนินการนี้คัดลอกเฉพาะรายการ ระดับบนสุด เท่านั้น รายการที่ซ้อนกันยังคงใช้ร่วมกันระหว่างต้นฉบับและสำเนา