Hướng dẫn dùng sorting definition python - sử dụng định nghĩa sắp xếp python

Xin chào mọi người. Ngôn ngữ lập trình Python 3 có sẵn 2 hàm sorted() và sort(), vậy hôm nay chúng ta hãy cùng hiểu xem các hàm này hoạt động thế nào.

Hàm sorted()

Đây là một hàm có sẵn trong Python. Đúng như tên gọi của nó thì hàm này có thể sắp xếp các phần tử ở trong một list, set hay tuple.

Sắp xếp với số

Hàm sorted được dùng thường xuyên với việc sắp xếp các số.

Ví dụ :

Với list:

>>> number_list = [7, 5, 8, 2, 4, 1, 3]
>>> sorted(number_list)
[1, 2, 3, 4, 5, 7, 8]

Với tuple:

>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]

Và với set:

>>> number_set = {7, 5, 8, 2, 4, 1, 3}
>>> sorted(number_set)
[1, 2, 3, 4, 5, 7, 8]

Có thể dễ dàng thấy là bất kể đầu vào là gì, thì đầu ra của hàm sorted() cũng sẽ là một list. Nếu bạn muốn chuyển lại kiểu cấu trúc ban đầu, bạn có thể gọi hàm biến đổi.

Ví dụ :

>>> number_set = {1, 1, 9, 5, 6, 7, 10, 11, 4, 3, 7}
>>> sorted_number_set = sorted(number_set)
>>> sorted_number_set
[1, 3, 4, 5, 6, 7, 9, 10, 11]
>>> set(sorted_number_set)
{1, 3, 4, 5, 6, 7, 9, 10, 11}

Với list:

Với tuple:

Ví dụ :

>>> char_list = ['I', 'i', 'one', 'two', 'three', 'a', 'b', 'c']
>>> sorted(char_list)
['I', 'a', 'b', 'c', 'i', 'one', 'three', 'two']

Với list:

Với tuple:

Và với set:

>>> sentence = 'I like abc'
>>> sorted(sentence)
[' ', ' ', 'I', 'a', 'b', 'c', 'e', 'i', 'k', 'l']

>>> number_set = {7, 5, 8, 2, 4, 1, 3} >>> sorted(number_set) [1, 2, 3, 4, 5, 7, 8]

Có thể dễ dàng thấy là bất kể đầu vào là gì, thì đầu ra của hàm sorted() cũng sẽ là một list. Nếu bạn muốn chuyển lại kiểu cấu trúc ban đầu, bạn có thể gọi hàm biến đổi.

Sắp xếp với chuỗi ký tự

Hàm sorted() cũng có thể được sử dụng để sắp xếp các chuỗi ký tự. Lưu ý là hàm sorted() là case-sensitive, tức là các ký tự in hoa sẽ có giá trị và thứ tự khác với các ký tự không in hoa.

>>> number_list = [1, 2, 3, 4, 5, 6]
>>> sorted(number_list, reverse=True)
[6, 5, 4, 3, 2, 1]

Bạn có thể sắp xếp số (dưới dạng ký tự )

>>> string_number_list = ['1', '5', '9', '4', '2', '0']
>>> sorted(string_number_list)
['0', '1', '2', '4', '5', '9']

multidimensional_array = [[1, 3], [4,0], [2,1], [7,3], [9,9]]

Bạn cũng có thể sắp xếp các ký tự trong một câu, sorted() sẽ coi từng ký tự là một phần tử và sẽ tách từng ký tự ra để sắp xếp.

lambda x:x[1]

Các tham số không bắt buộc

>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]
0

Như ta đã thấy, hàm sorted() phải nhận 1 tham số bắt buộc là một đối tượng dạng list, set hoặc tuple, nhưng sorted() còn nhận 2 tham số khác, là reverse và key

reverse

>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]
1

Khi bạn truyền một đối tượng vào hàm sorted(), tham số reverse được mặc định là False. Bạn có thể truyền vào reverse=True, khi đó sorted() sẽ sắp xếp đảo ngược thứ tự.

>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]
2

key

>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]
3

Nếu bạn có một hàm đặc biệt và cần chạy hàm này với mỗi phần tử của đối tượng truyền vào hàm sorted(), bạn có thể truyền vào tham số key, và sorted sẽ sắp xếp các phần tử dựa trên kết quả trả về của hàm đó. Giả dụ, bạn có 1 mảng 2 chiều

>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]
4

Và giờ bạn muốn sắp xếp mảng này dựa trên phần tử tại vị trí thứ 2 (tức index là 1), bạn có thể truyền vào key một hàm lambda, ở đây chúng ta chỉ cần sắp xếp theo phần thử tại index 1, vậy hàm lambda sẽ là

Kết hợp lại, ta có :method của kiểu dữ liệu list trong python. Có 1 số điểm cần lưu ý

  • Giới hạn và lỗi thường gặp với sorted():
  • Một trong những lỗi thường gặp nhất với sorted đó là trong đối tượng mà bạn truyền vào có các phần tử không thể so sánh được với nhau, ví dụ số và chữ, số và null, chữ và kiểu Boolean (True, False)
  • Một lỗi khác mà có thể khiến kết quả trả về không như ý muốn là so sánh thứ tự nhưng lại có cả chữ thường và chữ in hoa.đổi ngay tại chỗ đối tượng list đã gọi nó. Vì vậy bạn không nên gán kết quả trả về của list.sort() vào 1 biến vì giá trị của biến đó sẽ là None.
>>> number_tuple = (7, 5, 8, 2, 4, 1, 3)
>>> sorted(number_tuple)
[1, 2, 3, 4, 5, 7, 8]
5

Điều khác cần lưu ý đó là hàm mà được truyền vào key chỉ được phép nhận 1 tham số.

Và hàm được truyền vào key phải chạy thành công với mọi phần tử của đối tượng mà bạn đang truyền vào sorted().key giúp chúng chạy hàm với từng phần tử và reverse giúp chúng đảo ngược thứ tự sắp xếp. Mình mong các bạn đã học được thêm từ 2 bài viết này. Cảm ơn vì đã đọc ! Bạn có thể tham khảo thêm ở đây