Ở bài trước, chúng ta đã làm chủ việc điều khiển luồng chương trình bằng câu điều kiện và vòng lặp. Giờ là lúc khám phá các cấu trúc dữ liệu (data structures) mạnh mẽ mà Python cung cấp. Chúng là những vũ khí lợi hại giúp bạn tổ chức, lưu trữ và thao tác dữ liệu một cách hiệu quả.
Trong bài viết này, chúng ta sẽ tìm hiểu về bốn cấu trúc dữ liệu quan trọng nhất trong Python: List, Tuple, Set và Dictionary.
1. List (Danh Sách) hay gọi là Mảng
List là một danh sách có thứ tự các phần tử. List có thể chứa các phần tử có kiểu dữ liệu khác nhau, và các phần tử trong list có thể thay đổi được (mutable).
Cú Pháp:
my_list = [phan_tu_1, phan_tu_2, ..., phan_tu_n]
Ví dụ:
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed_list = [1, "hello", 3.14, True]
Các Thao Tác Với List:
-
Truy cập phần tử: Sử dụng chỉ số (index) để truy cập phần tử trong list. Chỉ số bắt đầu từ 0.
fruits = ["apple", "banana", "cherry"] print(fruits[0]) # Output: apple print(fruits[1]) # Output: banana
-
Sửa đổi phần tử: Gán giá trị mới cho phần tử tại một chỉ số.
fruits = ["apple", "banana", "cherry"] fruits[1] = "orange" print(fruits) # Output: ['apple', 'orange', 'cherry']
-
Thêm phần tử:
append()
: Thêm phần tử vào cuối list.insert()
: Thêm phần tử vào vị trí chỉ định.
fruits = ["apple", "banana", "cherry"] fruits.append("grape") print(fruits) # Output: ['apple', 'banana', 'cherry', 'grape'] fruits.insert(1, "kiwi") print(fruits) # Output: ['apple', 'kiwi', 'banana', 'cherry', 'grape']
-
Xóa phần tử:
remove()
: Xóa phần tử có giá trị chỉ định.pop()
: Xóa phần tử tại chỉ số chỉ định.del
: Xóa phần tử hoặc slice của list.clear()
: Xóa tất cả các phần tử trong list.
fruits = ["apple", "banana", "cherry", "banana"] fruits.remove("banana") # Chỉ xóa banana đầu tiên print(fruits) # Output: ['apple', 'cherry', 'banana'] fruits.pop(1) # Xóa phần tử tại chỉ số 1 (cherry) print(fruits) # Output: ['apple', 'banana'] del fruits[0] # Xóa phần tử tại chỉ số 0 (apple) print(fruits) # Output: ['banana'] fruits.clear() # Xóa tất cả các phần tử print(fruits) # Output: []
-
Slice list: Tạo một list mới chứa một phần của list ban đầu.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(numbers[2:5]) # Output: [2, 3, 4] print(numbers[:3]) # Output: [0, 1, 2] print(numbers[5:]) # Output: [5, 6, 7, 8, 9] print(numbers[::2]) # Output: [0, 2, 4, 6, 8] (bước nhảy 2) print(numbers[::-1]) # Output: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (đảo ngược list)
2. Tuple (Bộ)
Tuple tương tự như list, nhưng các phần tử trong tuple không thể thay đổi được (immutable). Tuple thường được sử dụng để lưu trữ các dữ liệu không thay đổi.
Cú Pháp:
my_tuple = (phan_tu_1, phan_tu_2, ..., phan_tu_n)
Ví dụ:
coordinates = (10, 20)
rgb_color = (255, 0, 0)
Các Thao Tác Với Tuple:
-
Truy cập phần tử: Tương tự như list, sử dụng chỉ số (index).
coordinates = (10, 20) print(coordinates[0]) # Output: 10
-
Không thể sửa đổi phần tử: Bạn sẽ nhận được lỗi nếu cố gắng sửa đổi một tuple.
coordinates = (10, 20) # coordinates[0] = 15 # Lỗi: TypeError: 'tuple' object does not support item assignment
-
Tuple slicing: Tương tự như list.
3. Set (Tập Hợp)
Set là một tập hợp không có thứ tự các phần tử duy nhất (không trùng lặp). Set thường được sử dụng để loại bỏ các phần tử trùng lặp và thực hiện các phép toán tập hợp.
Cú Pháp:
my_set = {phan_tu_1, phan_tu_2, ..., phan_tu_n}
Ví dụ:
numbers = {1, 2, 3, 4, 5}
letters = {"a", "b", "c"}
Các Thao Tác Với Set:
-
Thêm phần tử:
add()
: Thêm một phần tử.update()
: Thêm nhiều phần tử từ một iterable (list, tuple, set...).
numbers = {1, 2, 3} numbers.add(4) print(numbers) # Output: {1, 2, 3, 4} numbers.update([5, 6, 7]) print(numbers) # Output: {1, 2, 3, 4, 5, 6, 7}
-
Xóa phần tử:
remove()
: Xóa một phần tử (gây ra lỗi nếu phần tử không tồn tại).discard()
: Xóa một phần tử (không gây ra lỗi nếu phần tử không tồn tại).pop()
: Xóa và trả về một phần tử ngẫu nhiên.clear()
: Xóa tất cả các phần tử.
numbers = {1, 2, 3, 4} numbers.remove(3) print(numbers) # Output: {1, 2, 4} numbers.discard(5) # Không gây ra lỗi nếu 5 không tồn tại print(numbers) # Output: {1, 2, 4} numbers.pop() # Xóa một phần tử ngẫu nhiên print(numbers) numbers.clear() print(numbers) # Output: set()
-
Các phép toán tập hợp:
union()
hoặc|
: Hợp của hai set.intersection()
hoặc&
: Giao của hai set.difference()
hoặc-
: Hiệu của hai set.symmetric_difference()
hoặc^
: Hiệu đối xứng của hai set (các phần tử chỉ thuộc một trong hai set).
set1 = {1, 2, 3} set2 = {3, 4, 5} print(set1.union(set2)) # Output: {1, 2, 3, 4, 5} print(set1 | set2) # Output: {1, 2, 3, 4, 5} print(set1.intersection(set2)) # Output: {3} print(set1 & set2) # Output: {3} print(set1.difference(set2)) # Output: {1, 2} print(set1 - set2) # Output: {1, 2} print(set1.symmetric_difference(set2)) # Output: {1, 2, 4, 5} print(set1 ^ set2) # Output: {1, 2, 4, 5}
4. Dictionary (Từ Điển)
Dictionary là một tập hợp không có thứ tự các cặp key-value. Mỗi key là duy nhất trong dictionary, và key được sử dụng để truy cập value tương ứng. Dictionary thường được sử dụng để lưu trữ các dữ liệu có cấu trúc phức tạp.
Cú Pháp:
my_dict = { key_1: value_1, key_2: value_2, ..., key_n: value_n
}
Ví dụ:
person = { "name": "Alice", "age": 30, "city": "New York"
}
Các Thao Tác Với Dictionary:
-
Truy cập giá trị: Sử dụng key để truy cập giá trị tương ứng.
person = { "name": "Alice", "age": 30, "city": "New York" } print(person["name"]) # Output: Alice print(person["age"]) # Output: 30
-
Sửa đổi giá trị: Gán giá trị mới cho key.
person = { "name": "Alice", "age": 30, "city": "New York" } person["age"] = 31 print(person) # Output: {'name': 'Alice', 'age': 31, 'city': 'New York'}
-
Thêm cặp key-value:
person = { "name": "Alice", "age": 30, "city": "New York" } person["country"] = "USA" print(person) # Output: {'name': 'Alice', 'age': 30, 'city': 'New York', 'country': 'USA'}
-
Xóa cặp key-value:
del
: Xóa cặp key-value bằng key.pop()
: Xóa cặp key-value và trả về value (gây ra lỗi nếu key không tồn tại).popitem()
: Xóa và trả về cặp key-value cuối cùng được thêm vào dictionary.clear()
: Xóa tất cả các cặp key-value.
person = { "name": "Alice", "age": 30, "city": "New York", "country": "USA" } del person["country"] print(person) # Output: {'name': 'Alice', 'age': 30, 'city': 'New York'} age = person.pop("age") print(age) # Output: 30 print(person) # Output: {'name': 'Alice', 'city': 'New York'} person["country"] = "USA" key, value = person.popitem() print(key, value) # Output: country USA (hoặc một key-value bất kỳ) person.clear() print(person) # Output: {}
-
Các phương thức hữu ích:
keys()
: Trả về một view object chứa tất cả các key trong dictionary.values()
: Trả về một view object chứa tất cả các value trong dictionary.items()
: Trả về một view object chứa tất cả các cặp key-value trong dictionary.get()
: Trả về value tương ứng với key (trả về None nếu key không tồn tại, hoặc giá trị mặc định bạn cung cấp).
person = { "name": "Alice", "age": 30, "city": "New York" } print(person.keys()) # Output: dict_keys(['name', 'age', 'city']) print(person.values()) # Output: dict_values(['Alice', 30, 'New York']) print(person.items()) # Output: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')]) print(person.get("name")) # Output: Alice print(person.get("country")) # Output: None print(person.get("country", "Unknown")) # Output: Unknown
Kết luận:
Trong bài viết này, chúng ta đã khám phá các cấu trúc dữ liệu quan trọng nhất trong Python: List, Tuple, Set và Dictionary. Nắm vững kiến thức này sẽ giúp bạn tổ chức và thao tác dữ liệu một cách hiệu quả trong chương trình của mình.
Trong bài viết tiếp theo, chúng ta sẽ cùng nhau tìm hiểu về Hàm trong Python.
Bạn đã sử dụng cấu trúc dữ liệu nào trong chương trình của mình? Hãy chia sẻ với chúng tôi trong phần bình luận! Bạn có câu hỏi nào về cấu trúc dữ liệu không?