Slicing
Slice syntax
หัวข้อที่มีชื่อว่า “Slice syntax”Slice notation ของ Python ดึงลำดับย่อยจาก sequence type ใด ๆ — list, tuple, string และ bytes
seq[start : stop : step]start— index ของ element แรกที่รวม (ค่าเริ่มต้น: 0)stop— index ถัดจาก element สุดท้ายที่รวม (ค่าเริ่มต้น:len(seq))step— ช่วงระหว่าง element (ค่าเริ่มต้น: 1)
ส่วนใดก็ตามสามารถละได้ Python จะใส่ค่าเริ่มต้นให้
nums = [10, 20, 30, 40, 50, 60, 70]nums[:3] # [10, 20, 30] — สามตัวแรกnums[2:5] # [30, 40, 50] — index 2, 3, 4nums[::2] # [10, 30, 50, 70] — ทุก element ที่สองnums[::-1] # [70, 60, 50, 40, 30, 20, 10] — กลับลำดับNegative indices
หัวข้อที่มีชื่อว่า “Negative indices”Python รองรับ negative index: -1 คือ element สุดท้าย, -2 คือรองสุดท้าย และต่อไป
nums = [10, 20, 30, 40, 50, 60, 70]nums[-1] # 70 — element สุดท้ายnums[-3:] # [50, 60, 70] — สามตัวสุดท้ายnums[:-3] # [10, 20, 30, 40] — ทุกอย่างยกเว้นสามตัวสุดท้ายNegative index ทำให้เข้าถึงส่วนท้ายของ sequence ได้ง่ายโดยไม่ต้องรู้ความยาว
การกลับลำดับ sequence
หัวข้อที่มีชื่อว่า “การกลับลำดับ sequence”seq[::-1] คือวิธีที่ idiomatic ใน Python เพื่อกลับลำดับ sequence ใด ๆ
คืนค่าเป็น object ใหม่ที่กลับลำดับ — ไม่แก้ไข sequence ต้นฉบับ
original = [1, 2, 3, 4, 5]reversed_copy = original[::-1] # [5, 4, 3, 2, 1]print(original) # [1, 2, 3, 4, 5] — ไม่เปลี่ยนแปลงสำหรับ string [::-1] ทำงานเหมือนกัน:
s = 'Hello, World!'print(s[::-1]) # !dlroW ,olleHShallow copy ผ่าน slice
หัวข้อที่มีชื่อว่า “Shallow copy ผ่าน slice”seq[:] (ไม่มี start, stop หรือ step) คืน shallow copy ของ sequence
list ใหม่เป็น object ที่ต่างกันแต่แต่ละ element ยังชี้ไปยัง object เดียวกัน
original = [1, 2, 3, 4, 5]copy = original[:]copy[0] = 99print(original) # [1, 2, 3, 4, 5] — ไม่เปลี่ยนแปลงprint(copy) # [99, 2, 3, 4, 5]สำหรับโครงสร้างซ้อน (list ภายใน list) ใช้ copy.deepcopy() แทนหากต้องการ inner list ที่เป็นอิสระ
Named slices
หัวข้อที่มีชื่อว่า “Named slices”เก็บ slice ในตัวแปรด้วย slice(start, stop, step) เพื่อความอ่านง่าย:
HEADER = slice(None, 5)PAYLOAD = slice(5, -2)FOOTER = slice(-2, None)
data = b'HDRpayload!FT'ตัวอย่างรันได้
หัวข้อที่มีชื่อว่า “ตัวอย่างรันได้”nums = [10, 20, 30, 40, 50, 60, 70]print('first 3:', nums[:3])print('last 3:', nums[-3:])print('middle:', nums[2:5])print('every other:', nums[::2])print('reversed:', nums[::-1])
s = 'Hello, World!'print('first 5:', s[:5])print('last 6:', s[-6:])print('every 2nd:', s[::2])print('reversed:', s[::-1])
original = [1, 2, 3, 4, 5]copy = original[:]copy[0] = 99print('original:', original)print('copy:', copy)Loading Python runtime (first run only)…