แนวคิด
เรียงลำดับลิสต์ใหม่ ให้ค่าที่เหมือนกันติดกัน (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)]