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

Python: สร้างตัวเลขที่เรียงลำดับจากการรวมองค์ประกอบในอาร์เรย์

บทนำ

โปรแกรมนี้สาธิตการนำองค์ประกอบในลิสต์มารวมกันเป็นสตริงเดียว แล้วจัดเรียงตัวเลขแต่ละหลักจากน้อยไปมาก และแปลงเป็นจำนวนเต็ม

ขั้นตอนการทำงาน

  1. แปลงทุกองค์ประกอบในลิสต์เป็นสตริง
  2. รวม (join) เป็นสตริงเดียว
  3. จัดเรียงตัวอักษรในสตริง (ซึ่งคือตัวเลข) จากน้อยไปมาก
  4. แปลงกลับเป็นจำนวนเต็ม

ตัวอย่างโค้ด

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() ร่วมกัน ได้ผลลัพธ์เป็นตัวเลขที่จัดเรียงหลักจากน้อยไปมาก เหมาะสำหรับปริศนาตัวเลขหรือการสร้างรหัสเฉพาะ