แนวคิด
Equidigit tuples หมายถึงการแบ่งตัวเลขแต่ละตัวในลิสต์ออกเป็นสองส่วนเท่ากัน (หรือใกล้เคียง) โดยใช้จุดกึ่งกลางของจำนวนหลัก (digits) ตัวอย่างเช่น 5613 (4 หลัก) -> (56, 13)
ตัวอย่างโค้ด
my_list = [5613, 1223, 966143, 890, 65, 10221]
print("ลิสต์ต้นฉบับ:", my_list)
my_result = []
for sub in my_list:
s = str(sub)
mid_index = len(s) // 2
element_1 = int(s[:mid_index])
element_2 = int(s[mid_index:])
my_result.append((element_1, element_2))
print("ผลลัพธ์:", my_result)
ผลลัพธ์
ลิสต์ต้นฉบับ: [5613, 1223, 966143, 890, 65, 10221]
ผลลัพธ์: [(56, 13), (12, 23), (966, 143), (8, 90), (6, 5), (10, 221)]
คำอธิบาย
- แปลงตัวเลขเป็นสตริงเพื่อนับจำนวนหลักและตัดสลายนี้ (slicing)
len(s) // 2หาตำแหน่งกึ่งกลาง (หารปัดลง)s[:mid]ส่วนหน้า,s[mid:]ส่วนหลัง- แปลงกลับเป็น int และเก็บเป็น tuple
กรณีเลขคี่หลัก
ตัวเลขที่มีหลักคี่ เช่น 890 (3 หลัก) -> mid = 1 -> (8, 90) ส่วนหน้าสั้นกว่าส่วนหลัง 1 หลัก
เวอร์ชัน List Comprehension
result = [(int(str(x)[:len(str(x))//2]), int(str(x)[len(str(x))//2:])) for x in my_list]