Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – แปลงรายการสตริงที่มีตัวคั่นเป็นรายการ Tuple

บทความนี้สาธิตวิธีแปลงลิสต์ของสตริงที่คั่นด้วยตัวแบ่ง (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)
  • การประมวลผลข้อมูลเซ็นเซอร์ที่ส่งมาเป็นสตริง