Bài 6 – Kiểu dữ liệu danh sách (list) trong ngôn ngữ lập trình Python
1. Tìm hiểu kiểu dữ liệu list
– Mảng là tập hợp các phần tử cùng một kiểu dữ liệu duy nhất như: mảng số nguyên, mảng số thực, mảng xâu,… Nhưng trong Python không có kiểu dữ liệu mảng mà sử dụng kiểu danh sách (list).
– Không giống như mảng, danh sách có thể chứa các phần tử khác kiểu nhau.
– Chỉ số của mảng bắt đầu từ 0 đến số phần tử – 1
2. Thao tác với dữ liệu kiểu list
a. Khởi tạo list
a.1. Dạng liệt kê: <tên biến> = [<giá trị 1>, <giá trị 2>,…,<giá trị n>]
Ví dụ:
s1 = “” #Tạo xâu rỗng s1
s2 = “Viet Nam”
#Tạo xâu s2 có s2[0] = “V”, s2[1] = “i”, …., s2[7] = “m”
#Duyệt qua từng phần tử của xâu:
s = “Ha Noi Viet Nam”
for i in s: print(i,end=“ “)
#Xuất ra màn hình dòng chữ: H a N o i V i e t N a m
Lưu ý:
– Hàm len(<tên biến mảng>) trả về số phần tử của mảng len(a) = 4, len(b) = 0, len(c) = 4
– Phép toán:
+ Nối mảng: <tên biến mảng 1> + <tên biến mảng 2> d = a + c thì mảng d gồm 8 phần tử
+ Nhân bản phần tử: <tên biến mảng> * <số lần> e = a * 3 thì mảng e gồm 12 phần tử
a.2. Dạng mô tả (list comprehension): [<biểu thức> for <tên biến> in <danh sách>]
Lưu ý: <danh sách> ở đây có thể là list, range hoặc str
Ví dụ:
#1
a = [2, 3, 5, 7]
#Tạo mảng a gồm 4 phần tử và a[0] = 2, a[1] = 3, a[2] = 5, a[3] = 7
b = [x**2 for x in a]
#Tạo mảng b gồm 4 phần tử, b[0] = 4, b[1] = 9, b[2] = 25, b[3] = 49
#2
s = “2 3 5 8 10”
c = [int(x) for x in s.split()]
#Tạo mảng c gồm 5 phần tử, có giá trị là 2, 3, 5, 8, 10
#3
d = [x for x in range(0,11,2)]
#Tạo mảng d gồm 6 phần tử, có giá trị lần lượt là 0, 2, 4, 6, 8, 10
#4
s = "12345"
e = [int(x) for x in s]
#Tạo mảng gồm 5 phần tử, có giá trị lần lượt là 1, 2, 3, 4, 5
#5
s = “2 3 5 8 10”
d = list(map(int,s.split()))
#Tạo mảng d gồm 5 phần tử, có giá trị là 2, 3, 5, 8, 10
Ngoài ra, ta có phương pháp sinh có điều kiện như sau:
[<biểu thức> for <tên biến> in <danh sách> if <điều kiện>]
Ví dụ:
#1
d = [x for x in range(0,11) if x%2==0]
#Tạo mảng d gồm 6 phần tử, có giá trị lần lượt là 0, 2, 4, 6, 8, 10
#2
s = ‘Xin chao 123’
a = [int(ch) for ch in s if ord(ch)>=48 and ord(ch)<=57
#Tạo mảng số nguyên a gồm 3 phần tử, các phần tử là các số trong xâu s
b. Nhập dữ liệu từ bàn phím vào list
a.1. Dạng nhập từng phần tử (thường biết trước số phần tử của mảng)
Ví dụ: Nhập dữ liệu vào mảng số nguyên a gồm có n phần tử từ bàn phím
n = int(input(“Mời nhập số phần tử: “));
#Nhập số phần tử của mảng
a = [] #Khởi tạo mảng rỗng
for i in range(0,n):
print(“Phần tử thứ”,i+1,”là:”,end=“ “)
#Xuất dòng thông báo
temp = int(input())
#Lấy giá trị nhập vào và chuyển sang kiểu số nguyên
a.append(temp)
#Thêm phần tử vào vị trí cuối cùng của mảng
a.2. Dạng nhập toàn bộ phần tử của mảng (thường chưa biết trước số phần tử của mảng)
Ví dụ: Nhập dữ liệu vào mảng số nguyên a từ bàn phím (các số cách nhau dấu cách)
a = list(map(int,input(“Mời nhập các phần tử của mảng: ”).split()))
c. Một số phương thức của list
Hàm | Ý nghĩa | Ví dụ |
append | a.append(<đối tượng>) | Bổ sung <đối tượng> vào cuối của một danh sách |
clear | a.clear() | Xóa dữ liệu, đưa danh sách a thành rỗng |
copy | a.copy() | Trả về một danh sách có giá trị giống a (một bản sao của a) |
extend | a.extend(<đối tượng>) | Mở rộng <đối tượng> vào cuối danh sách a |
index | a.index(<giá trị>) | Trả về chỉ số index đầu tiên trong danh sách của <giá trị> |
insert | a.insert(<index>,<đối tượng>) | Chèn <đối tượng> vào danh sách ở trước vị trí index |
pop | a.pop() | Xóa và lấy ra phần tử cuối cùng của danh sách a (ngăn xếp) |
remove | a.remove(<giá trị>) | Xóa đi phần tử đầu tiên có giá trị bằng <giá trị> |
reverse | a.reverse() | Trả lại danh sách có các phần tử ngược với phần tử a |
sort | a.sort([reverse=True/False]) | Sắp xếp lại danh sách a theo thứ tự tăng dần giá trị của các phần tử |
3. Tìm hiểu kiểu dữ liệu list of list
– Mảng nhiều chiều là mảng mà mỗi phần tử của nó có kiểu mảng
– Cách tham chiếu đến từng phần tử của mảng 2 chiều (list of list) như sau:
a[i][j] à Tham chiếu phần tử có chỉ số i và j
Trong đó i là chỉ số phần tử của mảng a và j là chỉ số phần tử của mảng a[i]
4. Thao tác với dữ liệu kiểu list of list
– Duyệt từng phần tử của list of list:
Ví dụ: Duyệt qua từng phần tử của mảng a gồm n phần tử, mỗi phần tử là mảng gồm m phần tử
for i in range(0,n):
for j in range(0,m):
<Thao tác với a[i][j]>
5. Phần bài tập về kiểu dữ liệu danh sách (list)
Câu 1: Viết chương trình nhập vào dãy các số nguyên bất kỳ, xuất ra màn hình tổng của các số trong dãy đó?
Câu 2: Viết chương trình nhập vào dãy các số bất kỳ, tìm số lớn nhất trong dãy số đó và xuất ra màn hình?
Câu 3: Viết chương trình nhập vào mảng gồm n số nguyên dương, hãy xuất ra màn hình tổng của các số lẻ trong mảng đó, với n>2
Câu 4: Viết chương trình nhập vào số nguyên dương n, xuất ra màn hình các số nguyên tố nhỏ hơn n, với n>2
Câu 5: Viết chương trình nhập vào bàn phím số nguyên dương n, xuất ra màn hình dãy số Fibonaxi. Biết rằng dãy Fibonaxi có dạng như sau: F0 = 1, F1 = 1, Fn = Fn-1 + Fn-2 với n>1
Câu 6: Viết chương trình dung phương pháp list comprehension để tạo các list sau:
a) Dãy các số là bội của 3 và nhỏ hơn 100
b) Dãy 10 số chính phương đầu tiên
Câu 7: Viết chương trình nhập vào dãy các số nguyên bất kỳ, kiểm tra và xuất ra màn hình xem dãy số đó có tạo thành cấp số cộng hay không?
Bài 8: Viết chương trình nhập vào danh sách gồm n người, mỗi người sẽ có các thông tin như: họ và tên, tuổi, giới tính và quê quán. Sau đó xuất ra màn hình thông tin của từng người đã nhập.
Câu 9: Viết chương trình nhập vào 2 ma trận vuông 5×5 và xuất ra màn hình ma trận tổng của hai ma trận đã nhập?
Xem tiếp Bài 7 – Kiểu dữ liệu từ điển (dict) trong ngôn ngữ lập trình Python