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

Reorder ลิสต์ให้ค่าซ้ำติดกัน (Group Consecutive Elements)

แนวคิด

เรียงลำดับลิสต์ใหม่ ให้ค่าที่เหมือนกันติดกัน (group identical values together) โดยรักษาจำนวนครั้งที่ปรากฏเดิม ใช้ collections.Counter นับความถี่ แล้วสร้างลิสต์ใหม่

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

from collections import Counter

my_list = [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]
print("ลิสต์ต้นฉบับ:", my_list)

freq = Counter(my_list)
print("ความถี่:", freq)

my_result = []
for value, count in freq.items():
    my_result.extend([value] * count)

print("ผลลัพธ์ (ค่าซ้ำติดกัน):", my_result)

ผลลัพธ์

ลิสต์ต้นฉบับ: [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]
ความถี่: Counter({44: 2, 21: 1, 83: 1, 52: 1, 61: 1, 72: 1, 81: 1, 96: 1, 18: 1})
ผลลัพธ์ (ค่าซ้ำติดกัน): [21, 83, 44, 44, 52, 61, 72, 81, 96, 18]

หมายเหตุ

  • ลำดับของค่าที่ไม่ซ้ำกัน ขึ้นอยู่กับลำดับใน freq.items() (Python 3.7+ รักษาลำดับ insertion)
  • หากต้องการเรียงตามค่า ใช้ sorted(freq.items())
  • หากต้องการเรียงตามความถี่ ใช้ freq.most_common()

เวอร์ชัน List Comprehension

my_result = [val for val, cnt in freq.items() for _ in range(cnt)]