บทนำ
โปรแกรมนี้สาธิตการนำองค์ประกอบในลิสต์มารวมกันเป็นสตริงเดียว แล้วจัดเรียงตัวเลขแต่ละหลักจากน้อยไปมาก และแปลงเป็นจำนวนเต็ม
ขั้นตอนการทำงาน
- แปลงทุกองค์ประกอบในลิสต์เป็นสตริง
- รวม (join) เป็นสตริงเดียว
- จัดเรียงตัวอักษรในสตริง (ซึ่งคือตัวเลข) จากน้อยไปมาก
- แปลงกลับเป็นจำนวนเต็ม
ตัวอย่างโค้ด
def get_sorted_number(num_str):
"""จัดเรียงตัวเลขในสตริงจากน้อยไปมาก แล้วคืนเป็น int"""
sorted_str = ''.join(sorted(num_str))
return int(sorted_str)
def merge_and_sort(my_list):
"""รวมลิสต์ตัวเลข แล้วจัดเรียงหลัก"""
# แปลงทุกตัวเป็นสตริงและรวม
merged_str = ''.join(map(str, my_list))
return get_sorted_number(merged_str)
# ทดสอบ
my_list = [7, 845, 69, 60, 99, 11]
print(f"ลิสต์ต้นทาง: {my_list}")
print(f"ผลลัพธ์: {merge_and_sort(my_list)}")
ผลลัพธ์
ลิสต์ต้นทาง: [7, 845, 69, 60, 99, 11]
ผลลัพธ์: 11456678999
การทำงานทีละขั้นตอน
# ขั้นตอนที่ 1: แปลงเป็นสตริงและรวม
[7, 845, 69, 60, 99, 11]
→ ['7', '845', '69', '60', '99', '11']
→ '784569609911'
# ขั้นตอนที่ 2: จัดเรียงตัวอักษร
'784569609911' → sorted → ['0', '1', '1', '4', '5', '6', '6', '7', '8', '9', '9', '9']
→ '011456678999'
# ขั้นตอนที่ 3: แปลงเป็น int (เลข 0 นำหน้าจะหายไป)
int('011456678999') → 11456678999
กรณีพิเศษและข้อควรระวัง
- เลข 0 นำหน้า: จะหายไปเมื่อแปลงเป็น int (如範例)
- ตัวเลขลบ: จะมีเครื่องหมาย '-' รวมอยู่ ต้องจัดการแยก
- ทศนิยม: จะมี '.' รวมอยู่ ต้องตัดสินใจว่าจะเก็บหรือลบ
เวอร์ชันจัดการตัวเลขลบและทศนิยม
def merge_and_sort_advanced(my_list, keep_negative=False, keep_decimal=False):
chars = []
for num in my_list:
s = str(num)
if not keep_negative:
s = s.replace('-', '')
if not keep_decimal:
s = s.replace('.', '')
chars.extend(s)
sorted_str = ''.join(sorted(chars))
return int(sorted_str) if sorted_str else 0
# ทดสอบ
print(merge_and_sort_advanced([7, -845, 69.5, 60])) # 014566789 → 14566789
สรุป
เทคนิคนี้ใช้ map(str, ...), join(), sorted() และ int() ร่วมกัน ได้ผลลัพธ์เป็นตัวเลขที่จัดเรียงหลักจากน้อยไปมาก เหมาะสำหรับปริศนาตัวเลขหรือการสร้างรหัสเฉพาะ