Beruflich Dokumente
Kultur Dokumente
LECTURE 06
2D ARRAY
TUPLE, SET, DICTIONARY
Big-O Coding
Website: www.bigocoding.com
1
Green
2
Green
3
Green
0 1 2 3
Chỉ số dòng (m) 0 4 18 9 3
1 12 45 74 15
2 84 87 75 67
4
Green
5
Green
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
6
Green
0 1 2 3
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
7
Green
8
Green
print(lst[0][0])
print(lst[2][1])
print(lst[2][3])
10
100
120
9
Green
print(lst[3][0])
print(lst[2][10])
print(lst[4][7])
10
Green
VD3: Index là số âm
lst1 = [10, 20, 30, 40]
lst2 = [50, 60, 70, 80]
lst3 = [90, 100, 110, 120]
# A 2D array with 3 rows and 4 columns
lst = [lst1, lst2, lst3]
print(lst[-1][0])
print(lst[2][-2])
print(lst[-1][-3])
90
110
100
11
Green
12
Green
for i in range(len(lst)):
for j in range(len(lst[i])):
print(lst[i][j], end=" ")
print()
10 20 30 40
50 60 70 80
90 100 110 120
10 20 30 40
50 60 70 80
90 100 110 120
15
Green
0 1 2 3
0 4 18 9 3
1 12 45 74 15
2 84 87 75 67
16
Green
17
Green
18
Green
tmp = [5, 6, 7, 8]
a = [[1, 2, 3, 4],
[5, 6, 7, 8]] # append tmp vào a
20
Green
21
Green
22
Green
23
Green
for i in range(m):
sum = 0
for j in range(n):
sum += a[i][j]
print("{0}: {1}".format(i, sum))
24
Green
25
Green
0 1 2 3
0 4 18 9 3
1 12 45 74 15
2 84 87 75 67
26
Green
27
Green
BT2 – Gợi ý –
Kiểm tra cột col có toàn âm
28
Green
29
Green
31
Green
32
Green
for j in range(n):
if isAllNegatives(a, m, n, j):
for i in range(m):
print(j, end = ' ')
33
Green
34
Green
• Cách làm:
• Dùng 1 vòng lặp, xử lí trên dòng 0 và dòng cuối (m-1)
• Cẩn thận, đừng xử lí lặp lại 2 lần các giá trị ở 4 góc.
0 1 2 3
0 4 18 -9 3
1 -7 -2 -4 -1
2 -8 87 -5 67
35
Green
BT3 – Gợi ý –
Đếm số nguyên tố trên đường biên
Xử lí cột 0
và cột n-1
Xử lí dòng 0
và dòng m-1
36
Green
• Xử lí:
1. Duyệt theo số dòng m, đếm các số nguyên tố ở
cột 0 và cột n-1.
37
Green
cnt = 0
# Vòng lặp 1: xét dòng 0 và dòng m-1
j = 0
a[0][0] = 4, isPrime? (No)
a[2][0] = -8, isPrime? (No)
j = 1
a[0][1] = 18, isPrime? (No)
a[2][1] = 87, isPrime? (No)
j = 2
a[0][2] = -9, isPrime? (No)
a[2][2] = -5, isPrime? (No)
j = 3
a[0][3] = 3, isPrime? (Yes), cnt = 1
a[2][3] = 67, isPrime? (Yes), cnt = 2 38
Green
39
Green
40
Green
41
Green
42
Green
43
Green
BT4 – Gợi ý –
Đếm số nguyên tố trên đường chéo chính
44
Green
• Xử lí:
1. Dùng vòng lặp for in range, duyệt qua các phần tử
[i][i] trong mảng để đếm số nguyên tố.
45
Green
cnt = 0
i = 0, a[0][0] = 2, isPrime? (Yes), cnt = 1
i = 1, a[1][1] = 6, isPrime? (No)
i = 2, a[2][2] = 7, isPrime? (Yes), cnt = 2
i = 3, a[3][3] = 6, isPrime? (No)
46
Green
47
Green
48
Green
BT5 – Gợi ý –
Tích số nguyên tố trên đường chéo phụ
49
Green
• Xử lí:
1. Dùng vòng lặp for in range, duyệt qua các phần tử
[i][n-i-1] trong mảng để tính tích.
50
Green
ans = 1
i = 0, a[0][3] = 3, isPrime? (Yes), ans = 1 * 3 = 3
i = 1, a[1][2] = 4, isPrime? (No)
i = 2, a[2][1] = 17, isPrime? (Yes), cnt = 3 * 17 = 51
i = 3, a[3][0] = 9, isPrime? (No)
51
Green
52
Green
53
Green
Tuple
• Tuple tương tự như list, dùng để chứa dãy các
phần tử. Tuy nhiên:
• List: có thể thay đổi giá trị các phần tử, có thể thêm
mới, có thể xóa bớt phần tử (mutable).
• Tuple: không thể thay đổi giá trị các phần tử, không
thể thêm mới, không thế xóa bớt phần tử
(immutable).
54
Green
Tạo tuple
• Sử dụng toán tử ( và ) để tạo tuple, thay vì sử dụng
toán tử [ và ] để tạo list.
t = (10, 20, 30, 40, 50)
print(t)
55
Green
print(t[0]) 10
print(t[4]) 50
Lưu ý
• Không thể thay đổi giá trị phần tử, không thể thêm
mới phần tử, không thể xóa phần tử trong tuple.
t = (10, 20, 30, 40, 50)
t[0] = 11
t.append(60)
t.insert(1, 11)
t.pop()
57
Green
58
Green
59
Green
Set
• Set, tập hợp, chứa mảng các phần tử, nhưng các
phần tử không trùng nhau.
60
Green
Tạo set
• Dùng toán tử { và } để tạo set.
61
Green
62
Green
40 10 50 20
63
Green
print(len(s))
s.add(60)
print(s)
s.add(50)
print(s)
4
{40, 10, 50, 20, 60}
{40, 10, 50, 20, 60}
64
Green
s.discard(40)
print(s)
s2 = s.copy()
s.add(70)
print(s2)
s.clear()
print(s)
65
Green
s1.difference(s2)
• Hiệu s1 và s2: trả về 1 set mới, chứa các phần tử
chỉ xuất hiện trong s1, không xuất hiện trong s2.
s1 = {1,2,3}
s2 = {1,4,5}
s3 = s1.difference(s2)
print(s1)
print(s2)
print(s3)
{1, 2, 3}
{1, 4, 5}
{2, 3}
66
Green
s1.intersection(s2)
• Giao s1 và s2: trả về các phần tử xuất hiện cả trong
s1 và s2.
s1 = {1, 2, 3}
s2 ={4, 1, 5}
s3 = s1.intersection(s2)
print(s1)
print(s2)
print(s3)
{1, 2, 3}
{1, 4, 5}
{1}
67
Green
s1.isdisjoint(s2)
• s1 và s2 không chứa phần tử chung nào đúng
không?
s1 = {1,2}
s2 = {1,2,4}
s3 = {5}
print(s1.isdisjoint(s2))
print(s1.isdisjoint(s3))
False
True
68
Green
issubset() vs issuperset()
• s1.issubset(s2): s1 có là tập con của s2.
print(s1.issubset(s2))
print(s2.issuperset(s1))
True
True
69
Green
s1.union(s2)
• Hội s1 và s2: trả về tất cả các phần tử trong tập s1
và tập s2.
s1 = {1,2,3}
s2 = {1,2,4}
s3 = s1.union(s2)
print(s1)
print(s2)
print(s3)
{1, 2, 3}
{1, 2, 4}
{1, 2, 3, 4}
70
Green
Dictionary
• List: chứa dãy các phần tử, truy xuất mỗi phần tử
thông qua [index]
71
Green
Tạo dictionary
• Sử dụng toán tử { và } và định dạng key: value để
tạo dictionary.
attendance['nstnguyen'] = 4
print(attendance)
attendance['dtphuyen'] = 4
print(attendance)
attendance['nvaminh'] = 5
print(attendance)
attendance['nstnguyen'] = 5
print(attendance)
{}
{'nstnguyen': 4}
{'dtphuyen': 4, 'nstnguyen': 4}
{'nvaminh': 5, 'dtphuyen': 4, 'nstnguyen': 4}
{'nvaminh': 5, 'dtphuyen': 4, 'nstnguyen': 5}
73
Green
del attendance['htthanh']
print(attendance)
{'nvaminh': 5, 'nstnguyen': 4}
KeyError: 'htthanh'
74
Green
keys()
• Lấy danh sách các key trong dictionary.
attendance = {'nstnguyen': 4, 'dtphuyen': 4, 'nvaminh': 5}
print(attendance.keys())
75
Green
values()
• Lấy danh sách value trong dictionary.
attendance = {'nstnguyen': 4, 'dtphuyen': 4, 'nvaminh': 5}
print(attendance.values())
dict_values([5, 4, 4])
76
Green
items()
• Trả về danh sách cặp (key, value) trong dictionary.
attendance = {'nstnguyen': 4, 'dtphuyen': 4, 'nvaminh': 5}
print(attendance.items())
77
Green
nvaminh: 5
nstnguyen: 4
dtphuyen: 4
78
Green
79
Green
Hỏi đáp
80