Python cung cấp hai phương thức chính để sắp xếp list: sort()
và sorted()
. Cả hai phương thức này đều có thể sắp xếp các phần tử của list theo thứ tự tăng dần hoặc giảm dần, và có thể tùy chỉnh thứ tự sắp xếp bằng cách sử dụng tham số key
.
Phương thức sort()
Phương thức sort()
là một phương thức của đối tượng list, được sử dụng để sắp xếp các phần tử của list tại chỗ (in-place). Điều này có nghĩa là list ban đầu sẽ bị thay đổi và không tạo ra một list mới.
Cú pháp:
python
list.sort(key=None, reverse=False)
Tham số:
key
(tuỳ chọn): Một hàm có thể được sử dụng để tùy chỉnh thứ tự sắp xếp.reverse
(tuỳ chọn): Một giá trị boolean. NếuTrue
, list sẽ được sắp xếp theo thứ tự giảm dần. Mặc định làFalse
.
Ví dụ:
python
fruits = ['apple', 'banana', 'cherry']
fruits.sort()
print(fruits) # Kết quả: ['apple', 'banana', 'cherry']
Sắp xếp theo thứ tự giảm dần:
python
fruits = ['apple', 'banana', 'cherry']
fruits.sort(reverse=True)
print(fruits) # Kết quả: ['cherry', 'banana', 'apple']
Sắp xếp với hàm tùy chỉnh:
python
def myfunc(n):
return abs(n - 50)
numbers = [100, 50, 65, 82, 23]
numbers.sort(key=myfunc)
print(numbers) # Kết quả: [50, 65, 23, 82, 100]
Phương thức sorted()
Phương thức sorted()
là một hàm tích hợp sẵn trong Python, được sử dụng để sắp xếp các phần tử của một iterable và trả về một list mới đã được sắp xếp. Hàm này không thay đổi iterable ban đầu.
Cú pháp:
python
sorted(iterable, key=None, reverse=False)
Tham số:
iterable
: Một đối tượng có thể lặp lại (list, tuple, dictionary, v.v.).key
(tuỳ chọn): Một hàm có thể được sử dụng để tùy chỉnh thứ tự sắp xếp.reverse
(tuỳ chọn): Một giá trị boolean. NếuTrue
, list sẽ được sắp xếp theo thứ tự giảm dần. Mặc định làFalse
.
Ví dụ:
python
fruits = ['apple', 'banana', 'cherry']
sorted_fruits = sorted(fruits)
print(sorted_fruits) # Kết quả: ['apple', 'banana', 'cherry']
print(fruits) # Kết quả: ['apple', 'banana', 'cherry']
Sắp xếp theo thứ tự giảm dần:
python
fruits = ['apple', 'banana', 'cherry']
sorted_fruits = sorted(fruits, reverse=True)
print(sorted_fruits) # Kết quả: ['cherry', 'banana', 'apple']
Sắp xếp với hàm tùy chỉnh:
python
def myfunc(n):
return abs(n - 50)
numbers = [100, 50, 65, 82, 23]
sorted_numbers = sorted(numbers, key=myfunc)
print(sorted_numbers) # Kết quả: [50, 65, 23, 82, 100]
Sắp xếp List chứa các kiểu dữ liệu khác nhau
Python cho phép sắp xếp các list chứa các kiểu dữ liệu khác nhau như số nguyên, chuỗi, và thậm chí là các list khác. Tuy nhiên, tất cả các phần tử trong list phải có thể so sánh được với nhau.
Ví dụ:
python
mixed_list = [3, 'banana', 1, 'apple', 2, 'cherry']
# mixed_list.sort() # Sẽ gây ra lỗi TypeError
Để sắp xếp một list chứa các kiểu dữ liệu khác nhau, bạn có thể sử dụng tham số key
để xác định tiêu chí sắp xếp.
Ví dụ:
python
mixed_list = [3, 'banana', 1, 'apple', 2, 'cherry']
sorted_mixed_list = sorted(mixed_list, key=str)
print(sorted_mixed_list) # Kết quả: [1, 2, 3, 'apple', 'banana', 'cherry']
Sắp xếp List lồng nhau
List trong Python có thể chứa các list khác, tạo ra các list lồng nhau. Bạn có thể sử dụng các phương thức sort()
và sorted()
để sắp xếp các list lồng nhau dựa trên các tiêu chí khác nhau.
Ví dụ:
python
nested_list = [[3, 4], [1, 2], [5, 6]]
nested_list.sort()
print(nested_list) # Kết quả: [[1, 2], [3, 4], [5, 6]]
Sắp xếp dựa trên phần tử thứ hai của mỗi list con:
python
nested_list = [[3, 4], [1, 2], [5, 6]]
nested_list.sort(key=lambda x: x[1])
print(nested_list) # Kết quả: [[1, 2], [3, 4], [5, 6]]
Sắp xếp List chứa từ điển
Bạn có thể sắp xếp một list chứa các từ điển dựa trên giá trị của một khóa cụ thể.
Ví dụ:
python
students = [
{'name': 'John', 'age': 25},
{'name': 'Jane', 'age': 22},
{'name': 'Dave', 'age': 23}
]
sorted_students = sorted(students, key=lambda x: x['age'])
print(sorted_students)
# Kết quả: [{'name': 'Jane', 'age': 22}, {'name': 'Dave', 'age': 23}, {'name': 'John', 'age': 25}]
Sắp xếp List theo nhiều tiêu chí
Bạn có thể sắp xếp một list theo nhiều tiêu chí bằng cách sử dụng một tuple trong tham số key
.
Ví dụ:
python
students = [
{'name': 'John', 'age': 25, 'grade': 'B'},
{'name': 'Jane', 'age': 22, 'grade': 'A'},
{'name': 'Dave', 'age': 23, 'grade': 'B'}
]
sorted_students = sorted(students, key=lambda x: (x['grade'], x['age']))
print(sorted_students)
# Kết quả: [{'name': 'Jane', 'age': 22, 'grade': 'A'}, {'name': 'Dave', 'age': 23, 'grade': 'B'}, {'name': 'John', 'age': 25, 'grade': 'B'}]
Sắp xếp List với các hàm tích hợp sẵn
Python cung cấp nhiều hàm tích hợp sẵn có thể được sử dụng làm tham số key
để sắp xếp list.
Ví dụ:
Sắp xếp theo độ dài của chuỗi:
python
words = ['apple', 'banana', 'cherry', 'date']
sorted_words = sorted(words, key=len)
print(sorted_words) # Kết quả: ['date', 'apple', 'banana', 'cherry']
Sắp xếp không phân biệt chữ hoa chữ thường:
python
words = ['banana', 'Orange', 'Kiwi', 'cherry']
sorted_words = sorted(words, key=str.lower)
print(sorted_words) # Kết quả: ['banana', 'cherry', 'Kiwi', 'Orange']
Sắp xếp List với các thuật toán sắp xếp nâng cao
Python cung cấp các thuật toán sắp xếp nâng cao như merge sort, quicksort, và radix sort. Các thuật toán này có thể được sử dụng để tối ưu hóa hiệu suất trong các tình huống cụ thể.
Ví dụ:
Sử dụng merge sort:
python
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
L = arr[:mid]
R = arr[mid:]
merge_sort(L)
merge_sort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
arr = [12, 11, 13, 5, 6, 7]
merge_sort(arr)
print(arr) # Kết quả: [5, 6, 7, 11, 12, 13]
Kết luận
Sắp xếp list là một kỹ thuật quan trọng và thường xuyên được sử dụng trong lập trình Python. Python cung cấp nhiều phương thức và hàm tích hợp sẵn để sắp xếp list một cách hiệu quả và linh hoạt. Bằng cách nắm vững các phương thức sort()
và sorted()
, cũng như các kỹ thuật sắp xếp nâng cao, bạn có thể dễ dàng sắp xếp và quản lý dữ liệu trong các ứng dụng Python của mình.