[ATBS2nd]Chương 1 - Python cơ bản - Phần 11

Chào các bạn,
Chúng ta tiếp tục với danh sách(list) trong Python.
Một chủ đề nữa mà bạn sẽ cần phải hiểu trước khi bạn có thể bắt đầu viết chương trình một cách nghiêm túc là kiểu dữ liệu danh sách và người anh em của nó, bộ dữ liệu(tuple). Danh sách và bộ dữ liệu có thể chứa nhiều giá trị, điều này làm cho việc viết chương trình xử lý lượng lớn dữ liệu dễ dàng hơn. Và vì bản thân danh sách có thể chứa các danh sách khác, bạn có thể sử dụng chúng để sắp xếp dữ liệu thành các cấu trúc phân cấp.
Trong chương này, tôi sẽ thảo luận về những điều cơ bản của danh sách. Tôi cũng dạy cho bạn về các phương thức, đó là các hàm được gắn với các giá trị của một loại dữ liệu nhất định.
Sau đó, tôi sẽ trình bày ngắn gọn các loại dữ liệu chuỗi (danh sách, bộ dữ liệu và chuỗi) và hiển thị cách chúng so sánh với nhau. Trong chương tiếp theo, tôi sẽ giới thiệu cho bạn loại dữ liệu từ điển(dictionary).
Kiểu dữ liệu danh sách
Danh sách là một giá trị chứa nhiều giá trị trong một chuỗi được sắp xếp. Giá trị danh sách thuật ngữ đề cập đến chính danh sách (là giá trị có thể được lưu trữ trong một biến hoặc được truyền cho một hàm như bất kỳ giá trị nào khác), chứ không phải các giá trị bên trong giá trị danh sách. Một giá trị danh sách trông như thế này: [‘cat’, ‘bat’, ‘rat’, ‘elephant’]. Giống như các giá trị chuỗi được nhập bằng các ký tự trích dẫn để đánh dấu nơi chuỗi bắt đầu và kết thúc, một danh sách bắt đầu bằng dấu ngoặc vuông mở và kết thúc bằng dấu ngoặc vuông đóng, []. Các giá trị trong danh sách cũng được gọi là các mục. Các mục được phân tách bằng dấu phẩy (nghĩa là chúng được phân cách bằng dấu phẩy).
Ví dụ: nhập thông tin sau vào command-line:

>>> [1, 2, 3]
[1, 2, 3]
>>> ['cat', 'bat', 'rat', 'elephant']
['cat', 'bat', 'rat', 'elephant']
>>> ['hello', 3.1415, True, None, 42]
['hello', 3.1415, True, None, 42]
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam
['cat', 'bat', 'rat', 'elephant']

Biến spam vẫn chỉ được gán một giá trị: giá trị danh sách. Nhưng giá trị danh sách chứa các giá trị khác. Giá trị [] là một danh sách trống không chứa giá trị, tương tự như “”, chuỗi trống.
Lấy giá trị phần tử trong danh sách với chỉ mục
Giả sử bạn có danh sách [‘cat’, ‘bat’, ‘rat’, ‘elephant’] được lưu trữ trong một biến có tên là spam.Mã Python spam[0] sẽ đánh giá là ‘cat’ và spam[1] sẽ đánh giá là ‘bat’, v.v. Số nguyên bên trong dấu ngoặc vuông theo danh sách được gọi là chỉ mục. Giá trị đầu tiên trong danh sách là ở chỉ số 0, giá trị thứ hai nằm ở chỉ số 1, giá trị thứ ba nằm ở chỉ số 2, v.v.
Hình sau đây hiển thị giá trị danh sách được gán cho spam, cùng với biểu thức chỉ mục sẽ đánh giá. Lưu ý rằng vì chỉ mục đầu tiên là 0, chỉ mục cuối cùng nhỏ hơn một kích thước của danh sách; một danh sách bốn mục có 3 là chỉ mục cuối cùng của nó.
b26
Ví dụ: nhập các biểu thức sau vào command line. Bắt đầu bằng cách chỉ định một danh sách cho biến spam.

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[0]
'cat'
>>> spam[1]
'bat'
>>> spam[2]
'rat'
>>> spam[3]
'elephant'
>>> ['cat', 'bat', 'rat', 'elephant'][3]
'elephant'
>>> 'Hello, ' + spam[0]
'Hello, cat'
>>> 'The ' + spam[1] + ' ate the ' + spam[0] + '.'
'The bat ate the cat.'

Lưu ý rằng biểu thức ‘Hello,’ + spam [0] ước tính thành ‘Hello,’ + ‘cat’ vì spam[0] ước tính theo chuỗi ‘cat’. Biểu thức này lần lượt đánh giá giá trị chuỗi ‘Hello, cat’.
Python sẽ cung cấp cho bạn một thông báo lỗi IndexError nếu bạn sử dụng một chỉ mục vượt quá số lượng giá trị trong giá trị danh sách của bạn.

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[10000]
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    spam[10000]
IndexError: list index out of range

Chỉ mục có thể chỉ là giá trị nguyên, không phải là giá trị thập phân. Ví dụ sau sẽ gây ra lỗi TypeError:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[1]
'bat'
>>> spam[1.0]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
spam[1.0]
TypeError: list indices must be integers or slices, not float
>>> spam[int(1.0)]
'bat'

Danh sách cũng có thể chứa các giá trị danh sách khác. Các giá trị trong danh sách của danh sách này có thể được truy cập bằng nhiều chỉ mục, như sau:

>>> spam = [['cat', 'bat'], [10, 20, 30, 40, 50]]
>>> spam[0]
['cat', 'bat']
>>> spam[0][1]
'bat'
>>> spam[1][4]
50

Chỉ mục đầu tiên chỉ ra giá trị danh sách sẽ sử dụng và chỉ số thứ hai cho biết giá trị trong giá trị danh sách. Ví dụ: spam [0] [1] là ‘bat’, giá trị thứ hai trong danh sách đầu tiên. Nếu bạn chỉ sử dụng một chỉ mục, chương trình sẽ in giá trị danh sách đầy đủ tại chỉ mục đó.
Chỉ mục âm
Trong khi các chỉ mục bắt đầu từ 0 và tăng lên, bạn cũng có thể sử dụng các số nguyên âm cho chỉ mục. Giá trị số nguyên -1 đề cập đến chỉ mục cuối cùng trong danh sách, giá trị -2 đề cập đến chỉ mục thứ hai tính từ cuối cùng trong danh sách, v.v. Nhập thông tin sau vào command-line:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[-1]
'elephant'
>>> spam[-3]
'bat'
>>> 'The ' + spam[-1] + ' is afraid of the ' + spam[-3] + '.'
'The elephant is afraid of the bat.'

Lấy một danh sách trong danh sách khác sử dụng lát(slice)
Giống như một chỉ mục có thể nhận được một giá trị từ danh sách, một lát có thể nhận được một số giá trị từ danh sách, dưới dạng danh sách mới. Một lát được gõ giữa các dấu ngoặc vuông, giống như một chỉ mục, nhưng nó có hai số nguyên cách nhau bởi dấu hai chấm. Lưu ý sự khác biệt giữa các chỉ mục và lát.

  • spam[2] là một list với một chỉ mục(một số nguyên).

  • spam[2:4] là một list với một lát(hai số nguyên).
    Trong một lát, số nguyên đầu tiên là chỉ mục nơi lát bắt đầu. Số nguyên thứ hai là chỉ số nơi lát cắt kết thúc. Một lát cắt đi lên, nhưng sẽ không bao gồm, giá trị ở chỉ mục thứ hai. Một lát đánh giá một giá trị danh sách mới. Nhập thông tin sau vào command-line:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[0:4]
['cat', 'bat', 'rat', 'elephant']
>>> spam[1:3]
['bat', 'rat']
>>> spam[0:-1]
['cat', 'bat', 'rat']

Là một phím tắt, bạn có thể bỏ qua một hoặc cả hai chỉ mục ở hai bên của dấu hai chấm trong lát cắt. Loại bỏ chỉ mục đầu tiên giống như sử dụng 0 hoặc đầu danh sách. Việc loại bỏ chỉ mục thứ hai cũng giống như sử dụng độ dài của danh sách, phần này sẽ cắt đến cuối danh sách. Nhập thông tin sau vào command-line:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[:2]
['cat', 'bat']
>>> spam[1:]
['bat', 'rat', 'elephant']
>>> spam[:]
['cat', 'bat', 'rat', 'elephant']

Lấy độ dài của danh sách với hàm len()
Hàm len() sẽ trả về số lượng giá trị trong một danh sách được truyền cho nó, giống như nó có thể đếm số lượng ký tự trong một giá trị chuỗi. Nhập thông tin sau vào command-line:

>>> spam = ['cat', 'dog', 'moose']
>>> len(spam)
3

Thay đổi giá trị trong danh sách với chỉ mục
Thông thường, một tên biến đi ở phía bên trái của dấu vết gán, như spam = 42. Tuy nhiên, bạn cũng có thể sử dụng một chỉ mục của danh sách để thay đổi giá trị tại chỉ mục đó. Ví dụ: spam [1] = ‘aardvark’ có nghĩa là gán giá trị tại chỉ mục 1 trong danh sách spam cho chuỗi ‘aardvark’. Nhập thông tin sau vào command-line:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[1] = 'aardvark'
>>> spam
['cat', 'aardvark', 'rat', 'elephant']
>>> spam[2] = spam[1]
>>> spam
['cat', 'aardvark', 'aardvark', 'elephant']
>>> spam[-1] = 12345
>>> spam
['cat', 'aardvark', 'aardvark', 12345]

Nối danh sách và thay thế danh sách
Danh sách có thể được nối và nhân rộng giống như các chuỗi. Toán tử + kết hợp hai danh sách để tạo giá trị danh sách mới và toán tử * có thể được sử dụng với danh sách và giá trị số nguyên để sao chép danh sách. Nhập thông tin sau vào command-line:

>>> [1, 2, 3] + ['A', 'B', 'C']
[1, 2, 3, 'A', 'B', 'C']
>>> ['X', 'Y', 'Z'] * 3
['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']
>>> spam = [1, 2, 3]
>>> spam = spam + ['A', 'B', 'C']
>>> spam
[1, 2, 3, 'A', 'B', 'C']

Loại bỏ giá trị của danh sách với câu lệnh del
Câu lệnh del sẽ xóa các giá trị tại một chỉ mục trong danh sách. Tất cả các giá trị trong danh sách sau giá trị bị xóa sẽ được chuyển lên một chỉ mục. Ví dụ: nhập thông tin sau vào command-line:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> del spam[2]
>>> spam
['cat', 'bat', 'elephant']
>>> del spam[2]
>>> spam
['cat', 'bat']

Câu lệnh del cũng có thể được sử dụng trên một biến đơn giản để xóa nó, như thể đó là một câu lệnh không được gán lại. Nếu bạn cố gắng sử dụng biến sau khi xóa nó, bạn sẽ gặp lỗi NameError vì biến không còn tồn tại. Trong thực tế, bạn hầu như không bao giờ cần phải xóa các biến đơn giản. Câu lệnh del chủ yếu được sử dụng để xóa các giá trị khỏi danh sách.
Người dịch: Hungdh

2 Likes