0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Khám Phá Bí Mật Của Các Phép Toán Danh Sách Trong Python

Đăng vào 1 tháng trước

• 4 phút đọc

Gặp Gỡ Tủ Sách Ma Thuật Của Python

Hãy tưởng tượng bạn có một tủ sách nơi bạn lưu trữ những cuốn sách yêu thích của mình. Trong Python, một danh sách giống như tủ sách đó. Nhưng đây là một bí mật: đó là một loại tủ sách rất đặc biệt.

Hầu hết các lập trình viên mới vào nghề nghĩ về danh sách như một hàng sách đơn giản. Muốn thêm một cuốn sách? Đặt nó ở cuối. Muốn lấy một cuốn sách? Lấy nó từ cuối. Nhưng nếu tôi nói với bạn rằng việc lấy một cuốn sách từ đầu tủ sách khó hơn nhiều so với việc lấy từ phía sau thì sao?

Hãy để tôi giới thiệu với bạn Timothy Thủ Thư, người quản lý tủ sách của chúng ta. Timothy có một hệ thống:

python Copy
# Tủ sách của chúng ta bắt đầu với một số tác phẩm kinh điển
bookcase = ["Hoàng Tử Bé", "Mạng Nhện Charlotte", "Chúa Tể Những Chiếc Nhẫn", "Matilda"]

Bí Ẩn Của Phép Cắt Tốn Kém

Bạn có thể nghĩ rằng phép cắt là miễn phí—giống như việc chụp một bức ảnh của một phần tủ sách. Nhưng không phải vậy! Nó giống như việc xây dựng một tủ sách mini hoàn toàn mới với các bản sao của những cuốn sách đó.

python Copy
# Điều này nhìn có vẻ đơn giản nhưng tạo ra một tủ sách hoàn toàn mới!
chapter_2_and_3 = bookcase[1:3]  # Lấy "Mạng Nhện Charlotte" và "Chúa Tể Những Chiếc Nhẫn"

📊 Hãy Tưởng Tượng Điều Này: Hãy tưởng tượng Timothy xây dựng một tủ sách mini hoàn toàn mới, cẩn thận sao chép sách từ vị trí 1 và 2, sau đó đưa cho bạn tủ sách mới hoàn chỉnh. Tủ sách gốc vẫn không bị ảnh hưởng!

Tại sao điều này lại quan trọng? Hãy gặp Carol Người Sao Chép, người xử lý tất cả các yêu cầu cắt của chúng ta. Khi bạn yêu cầu bookcase[1:3], Carol:

  1. Xây dựng một tủ sách mới trống rỗng
  2. Đi đến vị trí 1 và 2 trong tủ sách gốc
  3. Cẩn thận sao chép "Mạng Nhện Charlotte" và "Chúa Tể Những Chiếc Nhẫn" vào tủ sách mới
  4. Trả lại tủ sách mới cho bạn

Điều này tốn thời gian và không gian! Nếu bạn có 10.000 cuốn sách, phép cắt sẽ sao chép tất cả chúng.

Bí Ẩn Giữa Append và Insert

Bây giờ, đây là nơi trở nên thú vị. Hãy xem điều gì xảy ra khi chúng ta thêm sách:

python Copy
# Thêm vào cuối thì dễ dàng cho Timothy
bookcase.append("Người Cho Quà")  # Timothy chỉ cần đặt nó ở cuối!

# Nhưng thêm vào đầu thì gây rối!
bookcase.insert(0, "Alice Ở Xứ Sở Diệu Kỳ")  # Ôi không! Mọi người phải dịch chuyển!

📊 Hãy Tưởng Tượng Điều Này: Hãy tưởng tượng Timothy thêm "Người Cho Quà" vào cuối—đơn giản! Bây giờ hãy tưởng tượng anh ấy chèn "Alice Ở Xứ Sở Diệu Kỳ" ở phía trước: mỗi cuốn sách đều phải dịch chuyển sang phải một khoảng cách để tạo chỗ. Với 10.000 cuốn sách, đó là 10.000 lần di chuyển!

Tại sao việc insert(0) lại tốn công sức như vậy? Bởi vì Timothy phải:

  1. Để mọi người di chuyển một vị trí sang phải
  2. Đặt "Alice Ở Xứ Sở Diệu Kỳ" vào vị trí đầu tiên bây giờ trống
  3. Cập nhật hồ sơ vị trí của mọi người

Nhưng append() chỉ thêm vào cuối—một thao tác đơn giản.

Bí Mật Của Toán Tử "in"

Dưới đây là một chi phí ẩn khác:

python Copy
# Tìm kiếm một cuốn sách cụ thể?
has_hobbit = "Chúa Tể Những Chiếc Nhẫn" in bookcase  # Timothy kiểm tra từng cuốn sách!

Timothy bắt đầu từ bên trái và kiểm tra từng cuốn sách một. Nếu "Chúa Tể Những Chiếc Nhẫn" ở cuối, anh ấy sẽ kiểm tra tất cả 10.000 cuốn sách trước!

Giải Pháp Thông Minh: Hệ Thống Thư Mục Từ Điển

python Copy
# Thay vào đó, hãy sử dụng từ điển như danh mục của chúng ta
book_catalog = {
    "Hoàng Tử Bé": 0,
    "Mạng Nhện Charlotte": 1, 
    "Chúa Tể Những Chiếc Nhẫn": 2,
    "Matilda": 3
}

# Bây giờ việc tìm kiếm một cuốn sách là tức thì!
has_hobbit = "Chúa Tể Những Chiếc Nhẫn" in book_catalog  # Timothy chỉ kiểm tra danh mục một lần!

Khi Nào Nên Sử Dụng deque Thay Thế

Đối với những trường hợp bạn thường xuyên thêm/xóa từ cả hai đầu, Python có một công cụ đặc biệt gọi là deque (phát âm là "deck")—giống như một tủ sách hai đầu:

python Copy
from collections import deque

# Một tủ sách đặc biệt nơi cả hai đầu đều có thể truy cập được
efficient_bookcase = deque(["Hoàng Tử Bé", "Mạng Nhện Charlotte", "Chúa Tể Những Chiếc Nhẫn"])

# Bây giờ cả hai thao tác đều nhanh chóng!
efficient_bookcase.appendleft("Alice Ở Xứ Sở Diệu Kỳ")  # Thêm vào đầu dễ dàng!
efficient_bookcase.pop()  # Xóa từ cuối dễ dàng!

Kết Luận: Nghĩ Như Timothy

Chìa khóa để trở thành lập trình viên Python trung cấp là hiểu những gì xảy ra trong hậu trường. Mỗi thao tác danh sách đều có một chi phí, và việc biết những chi phí này giúp bạn viết mã hiệu quả.

Hãy nhớ bảng cheat này:

  • Append (append(item)): Nhanh chóng! Giống như thêm vào cuối hàng
  • Chèn ở đầu (insert(0, item)): Chậm! Giống như khiến mọi người dịch chuyển
  • ⚠️ Cắt (my_list[start:end]): Tạo ra bản sao! Giống như xây dựng một tủ sách mới
  • Tìm kiếm (item in my_list): Chậm cho danh sách lớn! Giống như tìm kiếm từng cuốn sách
  • Tra cứu từ điển (item in my_dict): Nhanh chóng! Giống như sử dụng danh mục

Hãy chọn công cụ của bạn một cách khôn ngoan!


Aaron Rose là kỹ sư phần mềm và nhà văn công nghệ tại tech-reader.blog và tác giả của "Hãy Nghĩ Như Một Thiên Tài".

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào