Professional Documents
Culture Documents
1
Chương 7
4
Kiểu dữ liệu tuần tự
❖Bất biến = không thay đổi, các loại dữ liệu bất biến thông dụng
trong Python: bool, int, float, str, tuple và frozenset
❖Khả biến = có thể thay đổi, các loại dữ liệu khả biến thông
dụng trong Python gồm: list, set, dict
❖Chúng ta vẫn thay đổi giá trị của int, tại sao nói “bất biến”
➢Python không thực sự thay đổi giá trị của int, phần mềm tạo
vùng nhớ chứa giá trị mới và cho biến “trỏ” tới vùng đó
❖Ví dụ để hiểu rõ cơ chế này:
n = 100
print(n, id(n)) # 100 và id của biến n
n = n + 1
print(n, id(n)) # 101 và id của n thay đổi so với
trên
7
Khai báo
8
Khởi tạo list
9
So sánh 2 list: theo thứ tự từ điển
a = [1, 2, 3]
b = [1, 2, 3, 4]
c = [1.5]
d = ['a', 'b', 'c']
print(a > b) # False
print(a == b) # False
print(a < b) # True
print(a + [4] == b) # True
print(c <= b) # False
print(d != a) # True
print(d == list('abc')) # True
print(d >= c) # Lỗi
10
Phép toán, chỉ mục và cắt
11
Chỉ mục, lát cắt, xóa dữ liệu với list
a = list('abcde')
print(a) # ['a', 'b', 'c', 'd', 'e']
a[-1] = [0, 5, 9] # thay đổi phần tử cuối cùng
print(a) # ['a', 'b', 'c', 'd', [0, 5, 9]]
a[1:3] = [1, 2, 3] # thay đổi một đoạn
print(a) # ['a', 1, 2, 3, 'd', [0, 5, 9]]
print(a[2::-1]) # [2, 1, 'a']
a[2::-1] = [0] # lỗi, đoạn ngược không thể thay đổi
del a[2::-1] # xóa đoạn con từ 2 trở về đầu
print(a) # [3, 'd', [0, 5, 9]]
del a # xóa biến a
print(a) # lỗi, a không tồn tại
12
Các phương thức của list
13
Các phương thức của list
❖Ví dụ:
15
Ví dụ về sắp xếp với list
16
Duyệt list với vòng lặp for
17
Ví dụ về làm việc với list
19
Bài tập
1.
- Nhập 1 số nguyên dương n
- Nhập danh sách gồm n số nguyên a0, a1, …an-1.
- Hãy tính tổng các số nguyên dương lẻ có trong
dãy.
2.
- Nhập 1 số nguyên dương n (n>5)
- Nhập n số nguyên
- Nhập số nguyên dương k (0<k<=n)
- Tính tổng k số hạng liên tiếp mà có tổng lớn nhất.
20
Bài tập 1
Nhập số nguyên dương n và danh sách gồm n số nguyên a0,
a1, …an-1. Hãy tính tổng các số nguyên dương lẻ có trong dãy.
21
Bài tập 2
22
Bài tập 2
Nhập số nguyên n (n>5)
Nhập n số nguyên.
Nhập số nguyên k
(0<k<=n).
Tính tổng k số hạng liên
tiếp có tổng lớn nhất.
23
Ma trận – danh sách hai chiều
24
Ma trận – danh sách hai chiều
25
Ma trận – danh sách hai chiều
26
Ma trận – danh sách hai chiều
27
Ma trận – danh sách hai chiều
Ví dụ: Viết chương trình nhập vào một ma trận
gồm m hàng và n cột (0<=m, n<=5). In ra ma
trận được nhập.
cin>>x; a[i]=x;
Cin>>a[i]
28
Danh sách của danh sách
29
Bài tập
30
Nhắc lại: tạo danh sách
Cách 1: Kết quả 1, 3:
Cách 2:
Kết quả 2:
Cách 3:
Bài tập
32
Chữa bài tập
1. Tạo 1 danh sách n số nguyên bằng cách tạo ngẫu nhiên trong
khoảng từ [0,107]. Hãy thống kê danh sách xem mỗi phần tử xuất
hiện bao nhiêu lần?
Chữa bài tập
2. Dãy con tăng dài nhất: xét dãy số a gồm n số nguyên
a0,a1,..,an-1.
Chữa bài tập
2. Dãy con tăng dài nhất: xét dãy số a gồm n số nguyên a0,a1,..,an-1
35
Bài tập
Tổng đường
chéo chính và
đường chéo
phụ của ma
trận n hàng n
cột.
Phần tử lớn
nhất, nhỏ nhất
của ma trận.
36
Bài tập
Tổng đường
chéo chính và
đường chéo
phụ của ma
trận n hàng n
cột.
Phần tử lớn
nhất, nhỏ nhất
của ma trận.
37
Bài tập
38
Bài tập
44
Khai báo tuple không nhất thiết phải dùng ()
45
Tuple và list nhiều điểm giống nhau
46
Bộ sinh của tuple chỉ dùng được 1 lần
# t0 viết giống như bộ suy diễn danh sách
t0 = (c for c in 'Hello!')
# tạo t1 từ t0
t1 = tuple(t0)
# tạo t2 từ t0
t2 = tuple(t0)
print(t0) # <generator object <genexpr> at XXXX>
print(t1) # ('H', 'e', 'l', 'l', 'o', '!')
print(t2) # () <~~ như vậy t0 chỉ dùng được một lần
47
Tính bất biến của kiểu tuple
Tuple và str không thay đổi được nội dung
a = (1, 2, [3, 4], 'abc')
print(a[2]) # [3, 4]
a[2].append('xyz') # a[2] trở thành [3,4,'xyz']
print(a) # (1,2,[3,4,'xyz'],'abc')
a[2] = '123' # lỗi, vì không đc thay đổi ndung
a = (1, 2, 3) # ok: thay đổi a thành tuple mới
a += (4, 5) # ok: a thay đổi thành tuple mới
print(a) # (1, 2, 3, 4, 5)
del a # ok: xóa hoàn toàn a
48
Hàm dựng sẵn làm việc với list và tuple
1. Nhập từ bàn phím liên tiếp các từ tiếng Anh viết tách
nhau bởi dấu cách. Tách thành các từ sau đó in ra
màn hình các từ đó theo thứ tự từ điển.
2. Nhập từ bàn phím chuỗi các số nhị phân viết liên tiếp
được nối nhau bởi dấu phẩy. Hãy in ra những giá trị
được nhập, mỗi số trên 1 dòng.
3. Nhập số n, in ra màn hình các số nguyên dương nhỏ
hơn n mà có tổng các ước số của nó lớn hơn chính nó.
4. Nhập n, in n dòng đầu tiên của tam giác pascal
1
1 1
1. 2 1 (2,1)= (1,0) + (1,1); (2,2)=(1,1)+(1,2
1. 3. 3. 1. (n,k)=(n-1,k-1) + (n-1,k) 54
Bài tập
62
Tóm tắt nội dung bài
❖Hàng cũng là một dãy các dữ liệu như danh sách, nhưng
không thể thay đổi sau khi khởi tạo
➢Cũng có 3 cách khởi tạo:
▪ Khai báo trực tiếp trong cặp ngoặc tròn
▪ Khởi tạo bằng hàm tuple
▪ Khởi tạo bằng hàm sinh (một loại bộ suy diễn dành cho kiểu
hàng)
➢Cũng duyệt phần tử con bằng for hoặc truy cập qua chỉ mục
➢Cũng hỗ trợ các phép toán +, *, in và cắt lát
➢Các phương thức hỗ trợ chỉ có đếm (count) và tìm kiếm (index)
➢Hàng nhanh hơn danh sách, vì hàng “tĩnh” hơn
❖Miền là kiểu dữ liệu thiết kế đặc biệt cho vòng for theo chỉ
số, nhưng cũng có một vài đặc trưng của kiểu dữ liệu tuần
tự như kiểm tra, chỉ mục, cắt lát,...
63