Bài 3.2. Sửa đổi, thêm và xóa phần tử

Hầu hết các danh sách bạn tạo sẽ là động, nghĩa là bạn sẽ xây dựng một danh sách và sau đó thêm và xóa các phần tử khỏi nó khi chương trình của bạn chạy. Ví dụ, bạn có thể tạo một trò chơi trong đó người chơi phải bắn hạ người ngoài hành tinh từ trên trời. Bạn có thể lưu trữ tập hợp ban đầu của người ngoài hành tinh trong một danh sách và sau đó xóa một người ngoài hành tinh khỏi danh sách mỗi khi một người bị bắn hạ. Mỗi khi một người ngoài hành tinh mới xuất hiện trên màn hình, bạn thêm nó vào danh sách. Danh sách người ngoài hành tinh của bạn sẽ tăng và giảm độ dài trong suốt quá trình của trò chơi.

Sửa đổi các phần tử trong danh sách

Cú pháp để sửa đổi một phần tử tương tự như cú pháp để truy cập một phần tử trong danh sách. Để thay đổi một phần tử, sử dụng tên của danh sách theo sau là chỉ số của phần tử bạn muốn thay đổi, và sau đó cung cấp giá trị mới bạn muốn phần tử đó có.

Ví dụ, giả sử chúng ta có một danh sách các xe máy và mục đầu tiên trong danh sách là 'honda'. Chúng ta có thể thay đổi giá trị của mục đầu tiên này sau khi danh sách đã được tạo:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)

Ở đây chúng ta định nghĩa danh sách motorcycles, với 'honda' là phần tử đầu tiên. Sau đó, chúng ta thay đổi giá trị của mục đầu tiên thành 'ducati'. Đầu ra cho thấy rằng mục đầu tiên đã được thay đổi, trong khi phần còn lại của danh sách vẫn giữ nguyên:

['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

Bạn có thể thay đổi giá trị của bất kỳ mục nào trong danh sách, không chỉ mục đầu tiên.

Thêm các phần tử vào danh sách

Bạn có thể muốn thêm một phần tử mới vào danh sách vì nhiều lý do. Ví dụ, bạn có thể muốn làm cho người ngoài hành tinh mới xuất hiện trong một trò chơi, thêm dữ liệu mới vào một hình ảnh hóa, hoặc thêm người dùng mới đã đăng ký vào một trang web bạn đã xây dựng. Python cung cấp nhiều cách để thêm dữ liệu mới vào các danh sách hiện có.

Thêm phần tử vào cuối danh sách

Cách đơn giản nhất để thêm một phần tử mới vào danh sách là thêm mục đó vào cuối danh sách. Khi bạn thêm một mục vào danh sách, phần tử mới được thêm vào cuối danh sách. Sử dụng cùng danh sách mà chúng ta đã có trong ví dụ trước, chúng ta sẽ thêm phần tử mới 'ducati' vào cuối danh sách:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)

Ở đây phương thức append() thêm 'ducati' vào cuối danh sách, mà không ảnh hưởng đến bất kỳ phần tử nào khác trong danh sách:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

Phương thức append() làm cho việc xây dựng danh sách động trở nên dễ dàng. Ví dụ, bạn có thể bắt đầu với một danh sách trống và sau đó thêm các mục vào danh sách bằng một loạt các lệnh gọi append(). Sử dụng một danh sách trống, hãy thêm các phần tử 'honda', 'yamaha', và 'suzuki' vào danh sách:

motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)

Danh sách kết quả trông giống hệt như các danh sách trong các ví dụ trước:

['honda', 'yamaha', 'suzuki']

Xây dựng danh sách theo cách này rất phổ biến, vì bạn thường sẽ không biết dữ liệu mà người dùng của bạn muốn lưu trữ trong một chương trình cho đến khi chương trình đang chạy. Để đặt người dùng của bạn vào quyền kiểm soát, hãy bắt đầu bằng cách định nghĩa một danh sách trống sẽ chứa các giá trị của người dùng. Sau đó, thêm mỗi giá trị mới được cung cấp vào danh sách bạn vừa tạo.

Chèn phần tử vào danh sách

Bạn có thể thêm một phần tử mới vào bất kỳ vị trí nào trong danh sách của mình bằng cách sử dụng phương thức insert(). Bạn làm điều này bằng cách chỉ định chỉ số của phần tử mới và giá trị của mục mới:

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)

Trong ví dụ này, chúng ta chèn giá trị 'ducati' vào đầu danh sách. Phương thức insert() mở một không gian ở vị trí 0 và lưu trữ giá trị 'ducati' tại vị trí đó:

['ducati', 'honda', 'yamaha', 'suzuki']

Thao tác này đẩy tất cả các giá trị khác trong danh sách sang phải một vị trí.

Xóa các phần tử khỏi danh sách

Thường thì bạn sẽ muốn xóa một mục hoặc một tập hợp các mục khỏi danh sách. Ví dụ, khi một người chơi bắn hạ một người ngoài hành tinh từ trên trời, bạn có thể muốn xóa nó khỏi danh sách người ngoài hành tinh đang hoạt động. Hoặc khi một người dùng quyết định hủy tài khoản của họ trên một ứng dụng web bạn đã tạo, bạn sẽ muốn xóa người dùng đó khỏi danh sách người dùng đang hoạt động. Bạn có thể xóa một mục theo vị trí của nó trong danh sách hoặc theo giá trị của nó.

Xóa một mục bằng cách sử dụng câu lệnh del

Nếu bạn biết vị trí của mục bạn muốn xóa khỏi danh sách, bạn có thể sử dụng câu lệnh del:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)

Ở đây chúng ta sử dụng câu lệnh del để xóa mục đầu tiên, 'honda', khỏi danh sách xe máy:

['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']

Bạn có thể xóa một mục khỏi bất kỳ vị trí nào trong danh sách bằng cách sử dụng câu lệnh del nếu bạn biết chỉ số của nó. Ví dụ, đây là cách xóa mục thứ hai, 'yamaha', khỏi danh sách:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)

Xe máy thứ hai bị xóa khỏi danh sách:

['honda', 'yamaha', 'suzuki']
['honda', 'suzuki']

Trong cả hai ví dụ, bạn không thể truy cập giá trị đã bị xóa khỏi danh sách sau khi câu lệnh del được sử dụng.

Xóa một mục bằng cách sử dụng phương thức pop()

Đôi khi bạn sẽ muốn sử dụng giá trị của một mục sau khi bạn xóa nó khỏi danh sách. Ví dụ, bạn có thể muốn lấy vị trí x và y của một người ngoài hành tinh vừa bị bắn hạ, để bạn có thể vẽ một vụ nổ tại vị trí đó. Trong một ứng dụng web, bạn có thể muốn xóa một người dùng khỏi danh sách các thành viên đang hoạt động và sau đó thêm người dùng đó vào danh sách các thành viên không hoạt động.

Phương thức pop() xóa mục cuối cùng trong danh sách, nhưng nó cho phép bạn làm việc với mục đó sau khi xóa nó. Thuật ngữ pop xuất phát từ việc nghĩ về một danh sách như một ngăn xếp các mục và bật một mục ra khỏi đầu ngăn xếp. Trong phép ẩn dụ này, đầu ngăn xếp tương ứng với cuối danh sách.

Hãy bật một chiếc xe máy ra khỏi danh sách xe máy:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

Chúng ta bắt đầu bằng cách định nghĩa và in danh sách motorcycles. Sau đó, chúng ta bật một giá trị ra khỏi danh sách và gán giá trị đó cho biến popped_motorcycle. Chúng ta in danh sách để cho thấy rằng một giá trị đã bị xóa khỏi danh sách. Sau đó, chúng ta in giá trị đã bật để chứng minh rằng chúng ta vẫn có quyền truy cập vào giá trị đã bị xóa.

Đầu ra cho thấy rằng giá trị 'suzuki' đã bị xóa khỏi cuối danh sách và hiện được gán cho biến popped_motorcycle:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

Phương thức pop() có thể hữu ích như thế nào? Hãy tưởng tượng rằng các xe máy trong danh sách được lưu trữ theo thứ tự thời gian, theo thứ tự chúng ta sở hữu chúng. Nếu đây là trường hợp, chúng ta có thể sử dụng phương thức pop() để in một câu về chiếc xe máy cuối cùng chúng ta đã mua:

motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print(f"The last motorcycle I owned was a {last_owned.title()}.")

Đầu ra là một câu đơn giản về chiếc xe máy gần đây nhất chúng ta đã sở hữu:

The last motorcycle I owned was a Suzuki.
Bật các mục từ bất kỳ vị trí nào trong danh sách

Bạn có thể sử dụng pop() để xóa một mục từ bất kỳ vị trí nào trong danh sách bằng cách bao gồm chỉ số của mục bạn muốn xóa trong dấu ngoặc đơn:

motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title()}.")

Chúng ta bắt đầu bằng cách bật chiếc xe máy đầu tiên trong danh sách, và sau đó chúng ta in một thông báo về chiếc xe máy đó. Đầu ra là một câu đơn giản mô tả chiếc xe máy đầu tiên tôi từng sở hữu:

The first motorcycle I owned was a Honda.

Hãy nhớ rằng mỗi lần bạn sử dụng pop(), mục bạn làm việc với không còn được lưu trữ trong danh sách.

Nếu bạn không chắc chắn nên sử dụng câu lệnh del hay phương thức pop(), đây là một cách đơn giản để quyết định: khi bạn muốn xóa một mục khỏi danh sách và không sử dụng mục đó theo bất kỳ cách nào, hãy sử dụng câu lệnh del; nếu bạn muốn sử dụng một mục khi bạn xóa nó, hãy sử dụng phương thức pop().

Xóa một mục theo giá trị

Đôi khi bạn sẽ không biết vị trí của giá trị bạn muốn xóa khỏi danh sách. Nếu bạn chỉ biết giá trị của mục bạn muốn xóa, bạn có thể sử dụng phương thức remove().

Ví dụ, giả sử chúng ta muốn xóa giá trị 'ducati' khỏi danh sách xe máy:

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)

Ở đây phương thức remove() yêu cầu Python tìm ra vị trí của 'ducati' trong danh sách và xóa phần tử đó:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

Bạn cũng có thể sử dụng phương thức remove() để làm việc với một giá trị đang bị xóa khỏi danh sách. Hãy xóa giá trị 'ducati' và in lý do xóa nó khỏi danh sách:

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print(f"\nA {too_expensive.title()} is too expensive for me.")

Sau khi định nghĩa danh sách, chúng ta gán giá trị 'ducati' cho một biến có tên là too_expensive. Sau đó, chúng ta sử dụng biến này để yêu cầu Python xóa giá trị nào khỏi danh sách. Giá trị 'ducati' đã bị xóa khỏi danh sách nhưng vẫn có thể truy cập thông qua biến too_expensive, cho phép chúng ta in một câu về lý do chúng ta xóa 'ducati' khỏi danh sách xe máy:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.

Làm thêm nhiều bài tập miễn phí tại đây

Comments

There are no comments at the moment.