บทความนี้สาธิตวิธีแปลงลิสต์ของสตริงที่คั่นด้วยตัวแบ่ง (Delimiter) ให้กลายเป็นลิสต์ของ Tuple ที่ประกอบด้วยตัวเลข
โค้ดตัวอย่าง
# ข้อมูลต้นฉบับ: สตริงคั่นด้วยเครื่องหมาย '-'
my_list = ["33-22", "13-44-81-39", "42-10-42", "36-56-90", "34-77-91"]
print("ลิสต์ต้นฉบับ:")
print(my_list)
# เรียงลำดับก่อน (ตัวเลือก)
my_list.sort()
print("\nลิสต์หลังเรียง:")
print(my_list)
# ตัวคั่น
K = "-"
# แปลงเป็น Tuple ของจำนวนเต็ม
# 1. แยกสตริงด้วย split(K)
# 2. แปลงแต่ละส่วนเป็น int
# 3. รวมเป็น tuple
my_result = [tuple(int(element) for element in sub.split(K)) for sub in my_list]
print(f"\nตัวคั่น (K): {K}")
print("ผลลัพธ์ (ลิสต์ของ Tuple):")
print(my_result)
ผลลัพธ์
ลิสต์ต้นฉบับ:
['33-22', '13-44-81-39', '42-10-42', '36-56-90', '34-77-91']
ลิสต์หลังเรียง:
['13-44-81-39', '33-22', '34-77-91', '36-56-90', '42-10-42']
ตัวคั่น (K): -
ผลลัพธ์ (ลิสต์ของ Tuple):
[(13, 44, 81, 39), (33, 22), (34, 77, 91), (36, 56, 90), (42, 10, 42)]
อธิบาย List Comprehension
[tuple(int(element) for element in sub.split(K)) for sub in my_list]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
# สำหรับแต่ละ sub ใน my_list แยก sub ด้วย K แล้วแปลงเป็น int และรวมเป็น tuple
การจัดการข้อผิดพลาด (Error Handling)
def safe_convert(string_list, delimiter):
"""แปลงอย่างปลอดภัย - ข้ามรายการที่แปลงไม่ได้"""
result = []
for sub in string_list:
try:
tup = tuple(int(x) for x in sub.split(delimiter))
result.append(tup)
except ValueError:
print(f"ข้าม: '{sub}' (มีค่าที่แปลงเป็น int ไม่ได้)")
return result
# ทดสอบ
test_list = ["1-2-3", "4-5-abc", "6-7-8"]
print(safe_convert(test_list, "-"))
# ผลลัพธ์: [(1, 2, 3), (6, 7, 8)] พร้อมข้อความเตือนสำหรับ '4-5-abc'
การประยุกต์ใช้
- การแปลงข้อมูลจากไฟล์ CSV หรือ Log ที่มีรูปแบบตัวเลขคั่นด้วยตัวอักษร
- การพาร์สพิกัด (Coordinates) เช่น "10,20" → (10, 20)
- การประมวลผลข้อมูลเซ็นเซอร์ที่ส่งมาเป็นสตริง