Khi cần sắp xếp lại danh sách sao cho các phần tử giống nhau nằm liên tiếp, ta dùng Counter, danh sách rỗng và vòng lặp.
Ví dụ
from collections import Counter
my_list = [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]
print("Danh sách là:")
print(my_list)
my_frequencys = Counter(my_list)
my_result = []
for value, count in my_frequencys.items():
my_result.extend([value] * count)
print("Danh sách kết quả:")
print(my_result)
Kết quả đầu ra
Danh sách là: [21, 83, 44, 52, 61, 72, 81, 96, 18, 44] Danh sách kết quả: [21, 83, 44, 44, 52, 61, 72, 81, 96, 18]
Giải thích
Counterđếm tần suất: 44 xuất hiện 2 lần, các giá trị khác 1 lần.- Duyệt các cặp (giá trị, số lần), dùng
extend([value] * count)thêm giá trị lặp lại count lần. - Kết quả: các giá trị giống nhau được gom lại liên tiếp. Thứ tự theo thứ tự xuất hiện đầu tiên trong Counter (Python 3.7+ bảo toàn thứ tự insertion).
Cách khác: sorted(my_list, key=my_list.index) cũng gom nhóm nhưng giữ thứ tự xuất hiện đầu tiên.