Chunk Tuple เป็นกลุ่มขนาด N
เมื่อต้องการแบ่ง Tuple ออกเป็น Chunks (กลุ่ม) ขนาด N แต่ละกลุ่ม สามารถใช้ List Comprehension ได้
List Comprehension
เป็นรูปแบบเขียนโค้ดสั้นสำหรับวนลูปผ่าน List/Iterable และทำ Operation ได้ในบรรทัดเดียว
ตัวอย่างโค้ด
my_tuple_1 = (87, 90, 31, 85, 34, 56, 12, 5)
print("The first tuple is :")
print(my_tuple_1)
N = 2
print("The value of 'N' has been initialized")
# ใช้ range step = N แล้ว slice
my_result = [my_tuple_1[i : i + N] for i in range(0, len(my_tuple_1), N)]
print("The tuple after chunking is : ")
print(my_result)
ผลลัพธ์
The first tuple is : (87, 90, 31, 85, 34, 56, 12, 5) The value of 'N' has been initialized The tuple after chunking is : [(87, 90), (31, 85), (34, 56), (12, 5)]
คำอธิบาย
- กำหนด Tuple และแสดงผล
- กำหนดค่า N = 2 (ขนาด Chunk)
- ใช้
range(0, len(my_tuple_1), N)สร้าง Index เริ่มต้นของแต่ละ Chunk: 0, 2, 4, 6 - Slice
my_tuple_1[i : i + N]ดึง N Element ต่อเนื่อง - รวมเป็น List ของ Tuple
- แสดงผล
การทำงานของ Range และ Slice
| i | Slice [i:i+N] | ผลลัพธ์ |
|---|---|---|
| 0 | [0:2] | (87, 90) |
| 2 | [2:4] | (31, 85) |
| 4 | [4:6] | (34, 56) |
| 6 | [6:8] | (12, 5) |
กรณี Tuple ไม่หาร N ลงตัว
my_tuple = (1, 2, 3, 4, 5)
N = 2
result = [my_tuple[i:i+N] for i in range(0, len(my_tuple), N)]
print(result) # [(1, 2), (3, 4), (5,)] - Chunk สุดท้ายจะมีขนาดน้อยกว่า N
ใช้ itertools (Python 3.12+)
from itertools import batched
# Python 3.12 มี batched() built-in
result = list(batched(my_tuple_1, N))
print(result) # [(87, 90), (31, 85), (34, 56), (12, 5)]