sort
trong Python là một hàm được sử dụng để sắp xếp các phần tử của một list theo thứ tự tăng dần hoặc giảm dần. Hàm sort
có thể được áp dụng trên các list chứa các kiểu dữ liệu nguyên thủy như int
, float
và cả kiểu dữ liệu phức tạp như string
, tuple
, list
, v.v.
Cú pháp sử dụng hàm sort
như sau:
list.sort(reverse=False, key=None)
reverse
: có giá trị True hoặc False để quyết định sắp xếp theo thứ tự tăng dần (reverse=False) hoặc giảm dần (reverse=True).key
: đây là một hàm mà sẽ được sử dụng để đưa ra quyết định sắp xếp. Nếu tham số này không được cung cấp, các phần tử sẽ được sắp xếp theo thứ tự mặc định.
Ví dụ 1:
# Sắp xếp list các số nguyên theo thứ tự tăng dần
numbers = [3, 1, 4, 2, 5]
numbers.sort()
print(numbers) # output: [1, 2, 3, 4, 5]
# Sắp xếp list các số nguyên theo thứ tự giảm dần
numbers = [3, 1, 4, 2, 5]
numbers.sort(reverse=True)
print(numbers) # output: [5, 4, 3, 2, 1]
# Sắp xếp list các chuỗi theo thứ tự tăng dần
words = ['apple', 'banana', 'cherry', 'durian']
words.sort()
print(words) # output: ['apple', 'banana', 'cherry', 'durian']
# Sắp xếp list các tuple theo thứ tự tăng dần của phần tử thứ hai của mỗi tuple
data = [(3, 'apple'), (1, 'banana'), (4, 'cherry'), (2, 'durian')]
data.sort(key=lambda x: x[1])
print(data) # output: [(3, 'apple'), (2, 'durian'), (1, 'banana'), (4, 'cherry')]
Trong đoạn code trên, ta sử dụng phương thức sort()
của list để sắp xếp các phần tử của list theo một thứ tự nào đó. Cụ thể, ta có các ví dụ sau:
- Sắp xếp list
numbers
theo thứ tự tăng dần: ta gọi phương thứcsort()
trực tiếp trên listnumbers
mà không truyền tham số gì cả, vì thứ tự tăng dần là thứ tự mặc định củasort()
. - Sắp xếp list
numbers
theo thứ tự giảm dần: ta gọi phương thứcsort()
trên listnumbers
và truyền tham sốreverse=True
. - Sắp xếp list
words
theo thứ tự tăng dần: ta gọi phương thứcsort()
trên listwords
mà không truyền tham số gì cả, vì Python mặc định sắp xếp các chuỗi theo thứ tự từ điển (alphabetical order). - Sắp xếp list
data
theo thứ tự tăng dần của phần tử thứ hai của mỗi tuple: ta gọi phương thứcsort()
trên listdata
và truyền tham sốkey=lambda x: x[1]
. Tham sốkey
được sử dụng để chỉ định một hàm hoặc lambda expression để trích xuất giá trị để so sánh của mỗi phần tử trong list. Ở đây, ta sử dụng lambda expressionlambda x: x[1]
để trích xuất phần tử thứ hai của mỗi tuple trong listdata
.
Ví dụ 2:
Sắp xếp danh sách các sinh viên theo điểm số trong Python:
students = [
{"name": "John", "score": 90},
{"name": "Jane", "score": 85},
{"name": "Mike", "score": 95},
{"name": "Sarah", "score": 80}
]
# Sắp xếp danh sách sinh viên theo điểm số giảm dần
sorted_students = sorted(students, key=lambda x: x["score"], reverse=True)
# In ra danh sách sinh viên đã được sắp xếp
for student in sorted_students:
print(student["name"], student["score"])
Kết quả:
Mike 95
John 90
Jane 85
Sarah 80
Trong ví dụ này, chúng ta sử dụng hàm sorted
để sắp xếp danh sách sinh viên theo điểm số. Tham số key
được sử dụng để chỉ định một hàm lambda để lấy giá trị điểm số từ mỗi sinh viên để sắp xếp. Tham số reverse
được sử dụng để chỉ định thứ tự sắp xếp là giảm dần. Kết quả được lưu vào biến sorted_students
và được in ra màn hình bằng cách duyệt qua danh sách và in ra thông tin của từng sinh viên.
Ví dụ 3:
Có thể sử dụng module subprocess
trong Python để thực hiện các lệnh của hệ thống Linux. Ví dụ, ta có thể sử dụng lệnh ls
trong Linux để liệt kê tất cả các file trong một thư mục và sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần bằng cách sử dụng hàm sort
của Python.
Ví dụ, sau đây là một đoạn mã Python sử dụng lệnh ls
và sắp xếp kết quả theo thứ tự tăng dần:
import subprocess
# Thực hiện lệnh "ls" để liệt kê tất cả các file trong thư mục hiện tại
result = subprocess.run(['ls'], capture_output=True, text=True)
# Tách các tên file thành một list và sắp xếp theo thứ tự tăng dần
files = result.stdout.strip().split('\n')
files.sort()
# In ra các file đã được sắp xếp theo thứ tự tăng dần
print(files)
Ví dụ sau đây sử dụng lệnh ls
để liệt kê các file trong một thư mục cụ thể, sau đó sắp xếp theo thứ tự giảm dần sử dụng hàm sort
của Python:
import subprocess
# Thực hiện lệnh "ls" để liệt kê tất cả các file trong thư mục /etc
result = subprocess.run(['ls', '/etc'], capture_output=True, text=True)
# Tách các tên file thành một list và sắp xếp theo thứ tự giảm dần
files = result.stdout.strip().split('\n')
files.sort(reverse=True)
# In ra các file đã được sắp xếp theo thứ tự giảm dần
print(files)