Danh sách là cấu trúc dữ liệu phổ biến nhất trong Python. Chúng ta thường gặp tình huống cần biết danh sách đã cho có được sắp xếp hay chưa. Bài viết này trình bày các cách tiếp cận để đạt được điều này.
Sử dụng sort
Chúng ta tạo bản sao của danh sách cho trước, áp dụng hàm sort cho bản sao và lưu trữ nó như một danh sách mới. Sau đó so sánh với danh sách gốc để kiểm tra xem chúng có bằng nhau hay không.
Ví dụ
listA = [11,23,42,51,67] #Danh sách cho trước print("Danh sách cho trước : ",listA) listA_copy = listA[:] # Áp dụng sort cho bản sao listA_copy.sort() if (listA == listA_copy): print("Có, Danh sách đã sắp xếp.") else: print("Không, Danh sách chưa sắp xếp.") # Kiểm tra lại listB = [11,23,21,51,67] #Danh sách cho trước print("Danh sách cho trước : ",listB) listB_copy = listB[:] # Áp dụng sort cho bản sao listB_copy.sort() if (listB == listB_copy): print("Có, Danh sách đã sắp xếp.") else: print("Không, Danh sách chưa sắp xếp.")Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : [11, 23, 42, 51, 67] Có, Danh sách đã sắp xếp. Danh sách cho trước : [11, 23, 21, 51, 67] Không, Danh sách chưa sắp xếp.
Sử dụng all và range
Chúng ta có thể dùng hàm all để kiểm tra xem mọi phần tử của danh sách có nhỏ hơn hoặc bằng phần tử kế tiếp không, và dùng range để duyệt qua tất cả các phần tử.
Ví dụ
listA = [11,23,42,51,67] #Danh sách cho trước print("Danh sách cho trước : ",listA) # Áp dụng all và range if (all(listA[i] <= listA[i + 1] for i in range(len(listA)-1))): print("Có, Danh sách đã sắp xếp.") else: print("Không, Danh sách chưa sắp xếp.") # Kiểm tra lại listB = [11,23,21,51,67] print("Danh sách cho trước : ",listB) # Áp dụng all và range if (all(listB[i] <= listB[i + 1] for i in range(len(listB)-1))): print("Có, Danh sách đã sắp xếp.") else: print("Không, Danh sách chưa sắp xếp.")Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : [11, 23, 42, 51, 67] Có, Danh sách đã sắp xếp. Danh sách cho trước : [11, 23, 21, 51, 67] Không, Danh sách chưa sắp xếp.