Chương 10: Danh sách
Danh sách là 1 dãy các giá trị. Các giá trị trong 1 danh sách được gọ là phần tử.
Sử dụng ngoặc vuông để xác định danh sách - chúng có khả năng lồng ghép với nhau.
Duyệt danh sách: cú pháp tương tự như với chuỗi.
Các phép toán với danh sách
Cắt trong danh sách:
Có thể gán/cập nhật nhiều giá trị của phần tử.
Thêm một phần tử mới vào danh sách dùng lệnh append
Nối 2 danh sách với nhau sử dụng lệnh extend:
Cộng tất cả các số có trong danh sách sử dụng hàm vòng lặp như sua:
hoặc sử dụng hàm sum
Duyệt 1 danh sách và tạo 1 danh sách mới:
Hàm nối các từ riêng lẻ thành một dãy:
Một lưu ý như sau: nếu 2 biến có cùng giá trị về chuỗi thì chúng tương đương nhau nhưng nếu là 2 danh sách khác nhau thì sẽ khác nhau. Ví dụ
Tham chiếu bội:
Xóa phần tử đầu trên danh sách:
Sử dụng ngoặc vuông để xác định danh sách - chúng có khả năng lồng ghép với nhau.
>>> cheeses = ['Cheddar', 'Edam', 'Gouda']
>>> numbers = [17, 123]
>>> empty = []
>>> print cheeses, numbers, empty
['Cheddar', 'Edam', 'Gouda'] [17, 123] []
Các phần tử trong 1 danh sách cũng có thể được gắn nhãn bắt đầu tư số 0 để truy cập>>> print cheeses[0]
Cheddar
Các phần tử trong 1 danh sách có thể thay đổi được.>>> numbers = [17, 123]
>>> numbers[1] = 5
>>> print numbers
[17, 5]
Các chỉ số trong dãy cũng có tác dụng như chỉ số của chuỗi:
- Bất kì một biểu thức số nguyên nào cũng có thể được dùng làm chỉ số.
- Nếu bạn cố gắng đọc hoặc ghi một phần tử mà bản thân nó không tồn tại, bạn sẽ gặp phải lỗi
IndexError
. - Nếu một chỉ số có giá trị âm, nó sẽ được đếm ngược từ phía cuối danh sách.
>>> cheeses = ['Cheddar', 'Edam', 'Gouda']
>>> 'Edam' in cheeses
True
>>> 'Brie' in cheeses
False
Duyệt danh sách: cú pháp tương tự như với chuỗi.
for cheese in cheeses:
print cheese
Các phép toán với danh sách
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = a + b
>>> print c
[1, 2, 3, 4, 5, 6]
>>> [0] * 4
[0, 0, 0, 0]
>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
Cắt trong danh sách:
>>> t = ['a', 'b', 'c', 'd', 'e', 'f']
>>> t[1:3]
['b', 'c']
>>> t[:4]
['a', 'b', 'c', 'd']
>>> t[3:]
['d', 'e', 'f']
Nếu bỏ qua số trước dấu : thì sẽ bắt đầu từ vị trí đầu tiên, và tương tự với số ở sau thì sẽ bao gồm toàn bộ phần tiếp theo từ số đầu tiên tới cuối.Có thể gán/cập nhật nhiều giá trị của phần tử.
Thêm một phần tử mới vào danh sách dùng lệnh append
>>> t = ['a', 'b', 'c']
>>> t.append('d')
>>> print t
['a', 'b', 'c', 'd']
Nối 2 danh sách với nhau sử dụng lệnh extend:
>>> t1 = ['a', 'b', 'c']
>>> t2 = ['d', 'e']
>>> t1.extend(t2)
>>> print t1
['a', 'b', 'c', 'd', 'e']
Lệnh sắp xếp các phần tử trong danh sách:>>> t = ['d', 'c', 'e', 'b', 'a']
>>> t.sort()
>>> print t
['a', 'b', 'c', 'd', 'e']
Cộng tất cả các số có trong danh sách sử dụng hàm vòng lặp như sua:
def add_all(t):
total = 0
for x in t:
total += x
return total
hoặc sử dụng hàm sum
>>> t = [1, 2, 3]
>>> sum(t)
6
Duyệt 1 danh sách và tạo 1 danh sách mới:
Đôi khi bạn muốn duyệt một danh sách trong khi đồng thời lại tạo một danh sách khác. Chẳng hạn, hàm sau đây nhận vào một danh sách các chuỗi và trả về một danh sách mới bao gồm các chuỗi với kiểu chữ in:
def capitalize_all(t):
res = []
for s in t:
res.append(s.capitalize())
return res
res
được khởi tạo với một danh sách trống; mỗi lần chạy qua vòng lặp, ta thêm vào đó phần tử tiếp theo. Vì vậy, res
cũng là một kiểu biến tích lũy khác.
Một thao tác kiểu như
capitalize_all
(chuyển chữ in toàn bộ) đôi khi được coi tương đương như việc đánh số vì nó dùng một hàm (trong trường hợp này là phương thức capitalize
) để “đánh” cho mỗi phần tử trong một dãy.
Một thao tác thường gặp khác là chọn một số các phần tử từ danh sách và trả về một danh sách con. Chẳng hạn, hàm sau đây nhận vào một danh sách các chuỗi và sau đó trả về một danh sách trong đó chỉ bao gồm các chuỗi viết bằng chữ in:
def only_upper(t):
res = []
for s in t:
if s.isupper():
res.append(s)
return res
isupper
là một phương thức chuỗi trả về True
nếu như chuỗi chỉ bao gồm các chữ cái viết in.
Một thao tác kiểu như
only_upper
được gọi là lọc vì nó chọn ra một số các phần tử đồng thời lọc bỏ các phần tử khác.
Danh sách và chuỗi
Để chuyển 1 chuỗi sang một danh sách các ký tự thì chúng ta dùng list
>>> s = 'spam'
>>> t = list(s)
>>> print t
['s', 'p', 'a', 'm']
Để phá vỡ chuối thành các từ riêng lẻ chúng ta sử dụng hàm split:>>> s = 'pining for the fjords'
>>> t = s.split()
>>> print t
['pining', 'for', 'the', 'fjords']
Có thể sửu dụng 1 đối số để phân cách giữa các từ:>>> s = 'spam-spam-spam'
>>> delimiter = '-'
>>> s.split(delimiter)
['spam', 'spam', 'spam']
Hàm nối các từ riêng lẻ thành một dãy:
>>> t = ['pining', 'for', 'the', 'fjords']
>>> delimiter = ' '
>>> delimiter.join(t)
'pining for the fjords'
Một lưu ý như sau: nếu 2 biến có cùng giá trị về chuỗi thì chúng tương đương nhau nhưng nếu là 2 danh sách khác nhau thì sẽ khác nhau. Ví dụ
>>> a = 'banana'
>>> b = 'banana'
>>> a is b
True
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
Hai danh sách tương đương nhau vì chúg có phần tử giống nhau nhưng không đồng nhất và không cùng một đối tượng. Nếu 2 đối tượng đồng nhất nhau thì chúng tương đương nhau nhưng nếu chúng tương đương nhau nhưng chưa chắc đã đồng nhất.Tham chiếu bội:
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
Xóa phần tử đầu trên danh sách:
>>> letters = ['a', 'b', 'c']
>>> delete_head(letters)
>>> print letters
['b', 'c']
Thuật ngữ
- danh sách:
- Một dãy các giá trị.
- phần tử:
- Một trong số các giá trị của danh sách (hoặc một dãy nói chung).
- chỉ số:
- Một giá trị số nguyên để chỉ định một phần tử trong danh sách.
- danh sách lồng ghép:
- Một danh sách đóng vai trò là phần tử trong một danh sách khác.
- duyệt danh sách:
- Cách truy cập tuần tự từng phần tử trong danh sách.
- đánh số:
- Mối quan hệ trong đó từng phần tử của một tập hợp tương ứng với một phần tử trong tập hợp khác. Chẳng hạn, một danh sách là một phép đánh số giữa các chỉ số với các phần tử.
- biến tích lũy:
- Một biến được dùng trong vòng lặp để cộng dồn hoặc, nói chung là tích lũy để thu được một kết quả.
- gán rút gọn:
- Một lệnh nhằm cập nhật giá trị của một biến bằng cách dùng toán tử kiểu như
+=
. - rút gọn:
- Một dạng mẫu xử lý trong đó bao gồm duyệt một dãy và tính tích lũy với từng phần tử để gộp thành một kết quả cuối cùng.
- map:
- Một dạng mẫu xử lý duyệt chuỗi và thực hiện thao tác tính toán với từng phần tử.
- lọc:
- Một dạng mẫu xử lý duyệt chuỗi và lựa chọn những phần tử thỏa mãn một điều kiện nào đó.
- đối tượng:
- Thứ mà biến có thể tham chiếu đến được. Một đối tượng có kiểu và giá trị riêng của nó.
- tương đương:
- Có cùng giá trị.
- đồng nhất:
- Cùng là một đố tượng (và mặc nhiên là tương đương).
- tham chiếu:
- Sự liên hệ giữa một biến và giá trị của nó.
- tham chiếu bội:
- Trường hợp trong đó hai hoặc nhiều biến cùng tham chiếu đến một đối tượng.
- dấu phân cách:
- Một kí tự hoặc chuỗi được dùng để chỉ định những chỗ mà chuỗi cho trước cần được tách.
Nhận xét
Đăng nhận xét