Trường ĐH Công nghệ – Đại học Quốc gia Hà Nội
student_names = ["An", "Bình", "Chi"] # list
student_info = ("S001", "An", 3) # tuple
student_profile = { # dict
"id": "S001",
"name": "An",
"year": 3,
"major": "CS"
}
grades = [9.5, 8.0, 7.0, 10.0]
names = ["An", "Bình", "Chi"]
mixed = [1, "two", 3.0]
>>> nums = [10, 20, 30, 40, 50]
>>> len(nums)
5
>>> nums[0]
10
>>> nums[-1]
50
>>> nums[1:4]
[20, 30, 40]
>>> nums + [60, 70]
[10, 20, 30, 40, 50, 60, 70]
>>> "two" in ["one", "two", "three"]
True
nums = [10, 20, 30, 40, 50]
# Cập nhật & thêm
nums[0] = 11 # cập nhật
nums.append(60) # thêm cuối
nums.insert(2, 25) # thêm tại chỉ số
nums.extend([70, 80]) # thêm nhiều phần tử
# Xoá & sắp xếp
nums.remove(30) # xoá theo giá trị
popped = nums.pop() # xoá cuối, trả về phần tử
popped_index = nums.pop(1) # xoá theo chỉ số
nums.sort(reverse=True) # sắp xếp giảm dần
nums.reverse() # đảo ngược
Tạo list grades với các điểm số: 9.5, 8.0, 7.0, 10.0.
point = (21.0278, 105.8342) # (latitude, longitude)
rgb = (255, 200, 0)
info = ("An", 20, "CS")
def stats(xs):
total = sum(xs)
avg = total / len(xs)
return (total, avg) # trả về tuple (tổng, trung bình)
| Tuple | List | |
|---|---|---|
| Cú pháp | ( ) | [ ] |
| Thay đổi | Immutable (không đổi) | Mutable (có thể đổi) |
| Kích thước | Cố định | Thay đổi |
| Ứng dụng | Dữ liệu cố định | Dữ liệu linh hoạt |
| Ví dụ | (1, 2, 3) | [1, 2, 3] |
t = (3, 4, 5)
print(t[0]) # truy cập phần tử
print(t[1:3]) # cắt (slicing)
print(len(t)) # độ dài
print(4 in t) # kiểm tra thành phần
Không thể thay đổi phần tử (immutable):
t = (3, 4, 5)
t[0] = 10 # lỗi: TypeError
point = (3, 4)
x, y = point
print(x, y)
Hữu ích khi hàm trả về nhiều giá trị:
def stats(xs):
total = sum(xs)
avg = total / len(xs)
return (total, avg) # trả về tuple (tổng, trung bình)
s, a = stats([10, 20, 30])
print(s, a)
names = ["An", "Bình", "Chi"]
for index, name in enumerate(names):
print(index, name)
Output:
0 An
1 Bình
2 Chi
Tập hợp không có thứ tự các cặp key: value; mỗi key là duy nhất.
profile = {"name": "An", "major": "CS", "year": 3}
score = {"An": 9.0, "Bình": 8.5}
>>> d = {"id": "S001", "name": "An", "grade": 9.2}
>>> print(d["name"]) # truy cập bằng key
An
>>> d["grade"] = 9.5 # cập nhật giá trị
>>> d["year"] = 3 # thêm key mới
>>> print(d)
{'id': 'S001', 'name': 'An', 'grade': 9.5, 'year': 3}
>>> d["age"] # key không tồn tại?
KeyError: 'age'
d = {}
d["x"] = 1 # gán key mới → tự động tạo
d["x"] = d["x"] + 2 # cập nhật
d.update({"y": 5})
exists = "x" in d
deleted = d.pop("y", None) # xoá nếu có
keys = list(d.keys())
items = list(d.items())
students = {
"S001": {"name": "An", "scores": [9.0, 8.5]},
"S002": {"name": "Bình", "scores": [7.5, 8.0]},
}
print(students["S001"]["scores"][0]) # 9.0
Ví dụ: đếm tần suất ký tự trong chuỗi bằng dict
text = "abba!"
count = {}
for ch in text:
count[ch] = count.get(ch, 0) + 1
print(count) # {'a': 2, 'b': 2, '!': 1}
d = {"An": 9.0, "Bình": 8.5, "Chi": 8.8}
for name in d: # mặc định lặp qua key
print(name, d[name])
for k, v in d.items(): # lặp qua (key, value)
print(k, v)
Dict không phải sequence → không có chỉ số số nguyên.
| List | Tuple | Dictionary | |
|---|---|---|---|
| Cú pháp | [ ] | ( ) | {key: value} |
| Giữ thứ tự? | ✅ Có | ✅ Có | ⚠️ Có (theo thứ tự chèn, từ Python 3.7) |
| Mutable? | ✅ Có | ❌ Không | ✅ Có |
| Truy cập | Chỉ số (index) | Chỉ số (index) | Khoá (key) |
| Trùng lặp? | ✅ Có | ✅ Có | ❌ Khoá phải duy nhất |
| Dùng khi? | Tập dữ liệu kích thước thay đổi, nên đồng nhất | Bản ghi nhóm, kích thước cố định | Ánh xạ key → value (bảng tra cứu) |
| Ví dụ | [1, 2, 3] | (1, 2, 3) | {'a': 1, 'b': 2} |
Tạo chương trình lưu & phân tích điểm sinh viên.
grades = [9.0, 8.5, 7.5, 10.0, 9.5]
print("Điểm trung bình:", sum(grades) / len(grades))
grades.append(8.0)
grades.sort(reverse=True)
print("Danh sách điểm (giảm dần):", grades)
Câu hỏi: Nếu dùng grades[5] = 6.5 thì sẽ xảy ra điều gì?
hanoi = (21.0278, 105.8342)
print("Kinh độ Hà Nội:", hanoi[0])
print("Vĩ độ Hà Nội:", hanoi[1])
Câu hỏi: Tại sao sử dụng tuple cho toạ độ thay vì list?
students = {
"S001": {"name": "An", "score": 9.0},
"S002": {"name": "Bình", "score": 8.5},
}
for sid, info in students.items():
print(sid, info["name"], info["score"])
Câu hỏi: In điểm trung bình của tất cả sinh viên.
Viết chương trình quản lý dữ liệu lớp học:
Mỗi cấu trúc dữ liệu liên quan đến các khía cạnh của Tư duy Tính toán: