Python đã sắp xếp ()

Hàm sorted () trả về danh sách đã sắp xếp từ các mục trong một tệp có thể lặp lại.

Các sorted()chức năng sắp xếp các yếu tố của một iterable được đưa ra trong một thứ tự cụ thể (hoặc tăng dần hoặc giảm dần ) và trả về các sắp xếp iterable như một danh sách.

Cú pháp của sorted()hàm là:

 đã sắp xếp (có thể lặp lại, khóa = Không, đảo ngược = Sai)

Các tham số cho hàm sorted ()

sorted() có thể nhận tối đa ba tham số:

  • có thể lặp lại - Một chuỗi (chuỗi, bộ, danh sách) hoặc bộ sưu tập (bộ, từ điển, bộ cố định) hoặc bất kỳ trình lặp nào khác.
  • ngược lại (Tùy chọn) - Nếu True, danh sách đã sắp xếp bị đảo ngược (hoặc sắp xếp theo thứ tự giảm dần). Mặc định là Falsenếu không được cung cấp.
  • key (Tùy chọn) - Một chức năng đóng vai trò là một khóa để so sánh sắp xếp. Mặc định là None.

Ví dụ 1: Sắp xếp chuỗi, danh sách và bộ

 # vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))

Đầu ra

 ('a', 'e', ​​'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', ​​'i', 'o', 'u')

Lưu ý rằng trong mọi trường hợp, một danh sách đã sắp xếp được trả về.

Lưu ý: Một danh sách cũng có phương thức sort () thực hiện theo cùng một cách sorted(). Sự khác biệt duy nhất là sort()phương thức không trả về bất kỳ giá trị nào và thay đổi danh sách ban đầu.

Ví dụ 2: Sắp xếp theo thứ tự giảm dần

Các sorted()chức năng chấp nhận một reversetham số như một tham số tùy chọn.

Cài đặt reverse = Truesắp xếp có thể lặp lại theo thứ tự giảm dần.

 # set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))

Đầu ra

 ('u', 'o', 'i', 'e', ​​'a') ('u', 'o', 'i', 'e', ​​'a') ('u', 'o' , 'i', 'e', ​​'a')

Tham số chính trong hàm sorted () Python

Nếu bạn muốn triển khai của riêng mình để sắp xếp, sorted()cũng chấp nhận một keyhàm làm tham số tùy chọn.

Dựa trên giá trị trả về của hàm khóa, bạn có thể sắp xếp có thể lặp lại đã cho.

 đã sắp xếp (có thể lặp lại, key = len)

Đây len()là hàm tích hợp sẵn của Python để đếm chiều dài của một đối tượng.

Danh sách được sắp xếp dựa trên độ dài của phần tử, từ số thấp nhất đến cao nhất.

Ví dụ 3: Sắp xếp danh sách bằng cách sử dụng hàm sorted () có một hàm chính

 # take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)

Đầu ra

 Danh sách đã sắp xếp: ((4, 1), (2, 2), (1, 3), (3, 4))

Ví dụ 4: Sắp xếp bằng nhiều khóa

Giả sử rằng chúng tôi có danh sách sau:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )

Chúng tôi muốn sắp xếp danh sách theo cách mà học sinh có điểm cao nhất ở đầu. Trường hợp các học sinh có số điểm bằng nhau thì phải sắp xếp sao cho học sinh nhỏ tuổi đi trước.

Chúng ta có thể đạt được kiểu sắp xếp này với nhiều khóa bằng cách trả về bộ giá trị thay vì một số.

Hai bộ giá trị có thể được so sánh bằng cách so sánh các phần tử của chúng bắt đầu từ đầu tiên. Nếu có sự ràng buộc (các phần tử bằng nhau), phần tử thứ hai sẽ được so sánh, v.v.

 >>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True

Hãy sử dụng logic này để xây dựng logic sắp xếp của chúng ta.

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)

Đầu ra

 (('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Vì hàm logic sắp xếp nhỏ và nằm gọn trong một dòng, nên lambdahàm được sử dụng bên trong keythay vì truyền một tên hàm riêng biệt.

Chương trình trên có thể được viết bằng lambdahàm theo cách sau:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)

Đầu ra

 (('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Để tìm hiểu thêm về các hàm lambda, hãy truy cập Các hàm Lambda trong Python.

thú vị bài viết...