การตัดช่วง (slicing) เป็นเทคนิคทั่วไปสำหรับวิเคราะห์ข้อมูลจากลิสต์ใน Python แต่บางครั้งเราต้องการสร้างช่วงข้อมูลเฉพาะช่วงของค่า เช่น ต้องการพิมพ์ 4 สมาชิกโดยข้ามทุก 4 สมาชิกจากลิสต์ ในบทความนี้เราจะดูแนวคิดการตัดช่วงแบบช่วง (range slicing) ใน Python
ใช้ range() และ len()
เราสร้างลูป for เพื่อวนผ่านความยาวทั้งหมดของลิสต์ แต่เลือกเฉพาะสมาชิกที่ผ่านการทดสอบการหารลงตัว ในการทดสอบ เราตรวจสอบค่าที่เหลือของสมาชิกลำดับที่ k ในลิสต์ หากเศษมากกว่าหรือเท่ากับค่าช่วง เราจะรับสมาชิกนั้น มิฉะนั้นจะไม่รับ
ตัวอย่าง
range_slicing = [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79]
print("ลิสต์ที่กำหนด:", range_slicing)
# ค่าช่วง
s = 4
# ใช้ range และ len
result = [range_slicing[k] for k in range(len(range_slicing)) if k % (s * 2) >= s]
print("\nลิสต์หลังตัดช่วง:", result)
การรันโค้ดข้างต้นจะให้ผลลัพธ์ดังนี้:
The given list: [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79] The list after range slicing: [20, 24, 29, 36, 56, 70, 73, 79]
ใช้ enumerate()
เราใช้ตรรกะคล้ายกันแต่แทนที่จะใช้ range() และ len() เราใช้ enumerate() โปรดทราบว่าสมาชิกสุดท้ายในลิสต์ปรากฏในผลลัพธ์เพราะมันผ่านเงื่อนไขการหารลงตัว
ตัวอย่าง
range_slicing = [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79]
print("ลิสต์ที่กำหนด:", range_slicing)
# ค่าช่วง
s2 = 5
# ใช้ Enumerate
result_2 = [val for m, val in enumerate(range_slicing) if m % (s2 * 2) >= s2]
print("\nลิสต์หลังตัดช่วง:", result_2)
การรันโค้ดข้างต้นจะให้ผลลัพธ์ดังนี้:
The given list: [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79] The list after range slicing: [24, 29, 36, 39, 43, 79]
สรุป: ทั้งสองวิธีให้ผลลัพธ์คล้ายกัน แต่ enumerate() อ่านง่ายและ Pythonic กว่า