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

Chào các bạn,
Chúng ta lại tiếp tục với những bài về python cơ bản.
Toán tử gán tăng
Khi gán giá trị cho một biến, bạn sẽ thường xuyên sử dụng chính biến đó. Ví dụ: sau khi gán 42 cho
biến spam, bạn sẽ tăng giá trị trong spam lên 1 bằng mã sau:

>>> spam = 42
>>> spam = spam + 1
>>> spam
43

Như một bước viết tắt bạn có thể sử dụng toán tử += để tăng biến spam lên một đơn vị.

>>> spam = 42
>>> spam += 1
>>> spam
43

Các toán tử gắn viết cho +, -, *, /, và %


Toán tử + = cũng có thể thực hiện nối chuỗi và liệt kê và toán tử * = có thể thực hiện sao chép chuỗi và liệt kê. Nhập thông tin sau vào command line:

>>> spam = 'Hello,'
>>> spam += ' world!'
>>> spam
'Hello world!'
>>> bacon = ['Zophie']
>>> bacon *= 3
>>> bacon
['Zophie', 'Zophie', 'Zophie']

Phương thức(method)
Một phương thức giống như một hàm, ngoại trừ nó được gọi là trên một giá trị. Ví dụ: nếu một giá trị danh sách được lưu trữ trong spam, bạn sẽ gọi phương thức index danh sách (mà tôi sẽ giải thích ngay) trong danh sách đó như vậy: spam.index (‘xin chào’).
Phần phương thức xuất hiện sau giá trị, cách nhau một khoảng. Mỗi loại dữ liệu có tập hợp các phương thức riêng. Ví dụ, kiểu dữ liệu danh sách có một số phương thức hữu ích để tìm, thêm, xóa và thao tác các giá trị trong danh sách.
Tìm giá trị trong danh sách với phương thức index()
Các giá trị danh sách có một phương thức index () có thể được truyền một giá trị và nếu giá trị đó tồn tại trong danh sách, chỉ mục của giá trị được trả về. Nếu giá trị là giá trị trong danh sách, thì Python tạo ra lỗi ValueError. Nhập thông tin sau vào command line:

>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> spam.index('hello')
0
>>> spam.index('heyas')
3
>>> spam.index('howdy howdy howdy')
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    spam.index('howdy howdy howdy')
ValueError: 'howdy howdy howdy' is not in list

Khi có các bản sao của giá trị trong danh sách, chỉ mục xuất hiện đầu tiên của nó được trả về. Nhập thông tin sau vào command line và lưu ý rằng index () trả về 1, không phải 3:

>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1

Thêm giá trị vào trong danh sách với phương thức insert() và append()
Để thêm các giá trị mới vào danh sách, hãy sử dụng các phương thức append() và insert(). Nhập phần sau vào command line để gọi phương thức append () trên giá trị danh sách được lưu trong biến spam:

>>> spam = ['cat', 'dog', 'bat']
>>> spam.append('moose')
>>> spam
['cat', 'dog', 'bat', 'moose']

Cuộc gọi phương thức append () trước đó thêm đối số vào cuối của danh sách. Phương thức insert () có thể chèn một giá trị tại bất kỳ chỉ mục nào trong danh sách.
Đối số đầu tiên để insert() là chỉ mục cho giá trị mới và đối số thứ hai là giá trị mới được chèn. Nhập thông tin sau vào command line:

>>> spam = ['cat', 'dog', 'bat']
>>> spam.insert(1, 'chicken')
>>> spam
['cat', 'chicken', 'dog', 'bat']

Lưu ý rằng mã là spam.append (‘moose’) và spam.insert (1, ‘gà’), không phải spam = spam.append (‘moose’) và spam = spam.insert (1, ‘gà’). Cả append () hay insert () đều không đưa ra giá trị mới của spam làm giá trị trả về của nó. (Trên thực tế, giá trị trả về của append () và insert () là None, vì vậy bạn chắc chắn sẽ muốn lưu trữ giá trị này dưới dạng giá trị biến mới.) Thay vào đó, danh sách được sửa đổi tại chỗ. Sửa đổi một danh sách tại chỗ sẽ được đề cập chi tiết hơn sau này trong kiểu dữ liệu có thể thay đổi và không thay đổi được ở những phần sau.
Các phương thức thuộc về một kiểu dữ liệu duy nhất. Các phương thức append () và insert () là các phương thức liệt kê và chỉ có thể được gọi trên các giá trị danh sách, không phải trên các giá trị khác như chuỗi hoặc số nguyên. Nhập thông tin sau vào command line và lưu ý các thông báo lỗi AttributionError hiển thị:

>>> eggs = 'hello'
>>> eggs.append('world')
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    eggs.append('world')
AttributeError: 'str' object has no attribute 'append'
>>> bacon = 42
>>> bacon.insert(1, 'world')
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    bacon.insert(1, 'world')
AttributeError: 'int' object has no attribute 'insert'

Loại bỏ giá trị trong danh sách với phương thức remove()
Phương thức remove () được truyền giá trị cần xóa khỏi danh sách mà nó được gọi. Nhập thông tin sau vào command line:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('bat')
>>> spam
['cat', 'rat', 'elephant']

Cố gắng xóa một giá trị không tồn tại trong danh sách sẽ dẫn đến một lỗi ValueError. Ví dụ: nhập thông tin sau vào command line và nhận thấy lỗi được hiển thị:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('chicken')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    spam.remove('chicken')
ValueError: list.remove(x): x not in list

Nếu giá trị xuất hiện nhiều lần trong danh sách, chỉ có phiên bản đầu tiên của giá trị sẽ bị xóa. Nhập thông tin sau vào command line:

>>> spam = ['cat', 'bat', 'rat', 'cat', 'hat', 'cat']
>>> spam.remove('cat')
>>> spam
['bat', 'rat', 'cat', 'hat', 'cat']

Câu lệnh del rất tốt để sử dụng khi bạn biết chỉ số của giá trị bạn muốn xóa khỏi danh sách. Phương thức remove () hữu ích khi bạn biết giá trị bạn muốn xóa khỏi danh sách.
Sắp xếp giá trị trong danh sách với phương thức sort()
Danh sách các giá trị số hoặc danh sách các chuỗi có thể được sắp xếp với phương thức sort(). Ví dụ: nhập thông tin sau vào command line:

>>> spam = [2, 5, 3.14, 1, -7]
>>> spam.sort()
>>> spam
[-7, 1, 2, 3.14, 5]
>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']

Bạn cũng có thể chuyển True cho đối số từ khóa đảo ngược để sắp xếp các giá trị theo thứ tự ngược lại. Nhập thông tin sau vào command line:

>>> spam.sort(reverse=True)
>>> spam
['elephants', 'dogs', 'cats', 'badgers', 'ants']

Có ba điều bạn cần lưu ý về phương thức sort (). Đầu tiên,
phương thức sort () sắp xếp danh sách tại chỗ; đừng cố gắng nắm bắt giá trị trả về bằng cách viết mã như spam = spam.sort (). Thứ hai, bạn không thể sắp xếp danh sách có cả giá trị số và chuỗi các giá trị trong đó, vì Python không biết cách so sánh các giá trị này. Nhập thông tin sau vào command line và nhận thấy lỗi TypeError:

>>> spam = [1, 3, 2, 4, 'Alice', 'Bob']
>>> spam.sort()
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    spam.sort()
TypeError: '<' not supported between instances of 'str' and 'int'

Thứ ba, sort () sử dụng thứ tự ASCII, thay vì thứ tự chữ cái thực tế để sắp xếp các chuỗi. Điều này có nghĩa là chữ in hoa đến trước chữ cái viết thường. Do đó, chữ thường a được sắp xếp sao cho nó nằm sau chữ hoa Z. Ví dụ: nhập thông tin sau vào command line:

>>> spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']
>>> spam.sort()
>>> spam
['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']

Nếu bạn cần sắp xếp các giá trị theo thứ tự bảng chữ cái thông thường, hãy chuyển str.lower cho đối số từ khóa chính trong lệnh gọi phương thức sort ().

>>> spam = ['a', 'z', 'A', 'Z']
>>> spam.sort(key=str.lower)
>>> spam
['a', 'A', 'z', 'Z']

Điều này khiến hàm sort () xử lý tất cả các mục trong danh sách như thể chúng là chữ thường mà không thực sự thay đổi các giá trị trong danh sách.
Đảo ngược danh sách với phương thức reverse()
Nếu bạn cần nhanh chóng đảo ngược thứ tự của các mục trong danh sách, bạn có thể gọi phương thức danh sách reverse (). Nhập thông tin sau vào command line:

>>> spam = ['cat', 'dog', 'moose']
>>> spam.reverse()
>>> spam
['moose', 'dog', 'cat']

Giống như phương thức danh sách sort (), reverse () không trả về danh sách. Đây là lý do tại sao bạn viết spam.reverse (), thay vì spam = spam.reverse ().

Người dịch: Hungdh

2 Likes