Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python – Sắp xếp lại cho các phần tử liên tiếp (Reorder for consecutive elements)

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.