Chuyển đến nội dung chính

Python len(): Hướng dẫn cho người mới bắt đầu về đếm phần tử trong Python

Tìm hiểu cách dùng hàm Python len() để nhanh chóng biết kích thước của chuỗi, danh sách, từ điển và các cấu trúc dữ liệu khác. Khám phá ví dụ thực tiễn và lỗi thường gặp cần tránh khi làm việc với len() trong mã của bạn.
· 6 phút đọc

Khám phá cùng AI

Hàm len() là một trong những công cụ đầu tiên mà lập trình viên Python dựa vào để kiểm tra dữ liệu. Chắc chắn bạn đã gặp len() nếu bạn đang học qua khóa học Giới thiệu về Python cho Nhà phát triển của chúng tôi hoặc lộ trình kỹ năng Nền tảng Lập trình Python.

Trong bài viết này, tôi sẽ chỉ cho bạn cách len() hoạt động trong Python trên tất cả các kiểu dữ liệu phổ biến, và tôi sẽ chỉ ra những điều cần chú ý khi mọi thứ gặp trục trặc.

Hàm len() của Python làm gì?

Bạn có thể dùng hàm tích hợp len() của Python bất cứ khi nào cần kiểm tra một đối tượng chứa bao nhiêu mục. Tôi đang nghĩ đến việc đếm số phần tử trong một danh sách hoặc số ký tự trong một chuỗi. Bạn cũng có thể dùng nó để đếm số khóa trong một từ điển. Có rất nhiều cách dùng khác nhau.

Đây là cách dùng ở dạng cơ bản nhất:

len(object)

Chỉ cần đặt bất cứ thứ gì bạn muốn đo (như những thứ tôi đã liệt kê ở trên) vào vị trí của object.

Dùng len() với các kiểu dữ liệu Python phổ biến

Tôi đã liệt kê một số trường hợp dùng phổ biến ở trên, nhưng chúng vẫn còn hơi trừu tượng. Hãy cùng xem qua các ví dụ thường gặp để thấy rõ giá trị của việc dùng len().

Đếm ký tự trong chuỗi

Giả sử bạn muốn biết độ dài chính xác của một đoạn văn bản, bao gồm mọi khoảng trắng và dấu câu:

word = "Josef"
print(len(word))

Lệnh này in ra 5, vì từ "Josef" (với chữ "f") gồm năm ký tự.

Kiểm tra số mục trong danh sách

Nếu bạn muốn biết một danh sách chứa bao nhiêu mục, hãy dùng:

numbers = [10, 20, 30, 40, 50]
print(len(numbers))

Ở đây, bạn sẽ thấy kết quả là 5.

Lấy kích thước của tuple

Tuple, giống như danh sách, nhóm các mục lại với nhau nhưng là bất biến, nghĩa là không thể thay đổi sau khi tạo. len() cũng hoạt động ở đây:

dimensions = (1920, 1080)
print(len(dimensions))

Điều này cho ra 2, vì tuple lưu hai phần tử.

Đếm khóa trong từ điển

Từ điển Python xoay quanh các cặp khóa-giá trị. Khi bạn dùng len() trên một từ điển, nó chỉ đếm các khóa:

person = {"name": "Alice", "age": 30, "city": "Paris"}
print(len(person))

Vì vậy, bạn nhận được 3 (mỗi khóa một đơn vị).

Kiểm tra số phần tử duy nhất trong set

Set rất hữu ích khi bạn chỉ muốn lưu các mục duy nhất. len() sẽ cho bạn biết:

colors = {"red", "green", "blue", "red"}
print(len(colors))

Điều này trả về 3, vì "red" xuất hiện hai lần nhưng chỉ được tính một lần.

len() hoạt động như thế nào ở bên trong

Bạn có thể thắc mắc, giống như tôi đã từng, là len() thực sự xác định kích thước như thế nào.

Bên dưới, khi bạn gọi len() trên một đối tượng, Python sẽ tìm phương thức __len__ của đối tượng đó. Các kiểu dựng sẵn như danh sách, chuỗi, và từ điển đều có phương thức này.

Biết điều này cho chúng ta hiểu rằng, nếu chúng ta tạo lớp của riêng mình và muốn len() hoạt động với nó, chúng ta phải tự định nghĩa phương thức __len__:

class Box:
    def __init__(self, items):
        self.items = items

    def __len__(self):
        return len(self.items)

my_box = Box(["apple", "banana", "orange"])
print(len(my_box))

Ở đây, len() trả về 3, vì chiếc hộp chứa ba món. Cũng như với danh sách và chuỗi, len() sẽ hoạt động miễn là đối tượng cung cấp phương thức __len__.

Điều gì xảy ra khi len() không hoạt động?

Tất nhiên, không phải mọi thứ trong Python đều có độ dài. Nếu bạn thử dùng len() trên thứ gì đó không hỗ trợ (tôi sẽ cho bạn thấy ngay với kiểu dữ liệu int) Python sẽ thông báo bằng một lỗi TypeError. Đây là điều thường gặp, đặc biệt khi làm việc với dữ liệu trộn lẫn kiểu. Ví dụ:

num = 42 
print(len(num))

Điều này kích hoạt lỗi sau:

TypeError: object of type 'int' has no len()

Bất cứ khi nào thấy lỗi này, hãy kiểm tra lại rằng đối tượng bạn đang đo thực sự là một vùng chứa hoặc một dãy (chuỗi, danh sách, hoặc từ điển) và không phải là một giá trị đơn lẻ như số nguyên hoặc số thực.

Một vài cách dùng tiện lợi của len()

Giờ hãy thử nâng các ví dụ lên cho giống với tình huống lập trình thực tế hơn một chút.

Lặp với range

Khi bạn cần lặp qua một danh sách bằng chỉ số của nó, len() giúp bạn thiết lập phạm vi phù hợp cho vòng lặp:

fruits = ["apple", "banana", "cherry"]

for i in range(len(fruits)):
    print(f"Index {i}: {fruits[i]}")

Điều này in mỗi loại quả cùng chỉ số của nó, cho bạn cả thứ tự và ngữ cảnh.

Index 0: apple
Index 1: banana
Index 2: cherry

Kiểm tra vùng chứa rỗng

Thường thì, bạn sẽ muốn biết liệu một vùng chứa—như danh sách hoặc từ điển—có rỗng hay không trước khi tiếp tục:

cart = []

if len(cart) == 0:
    print("Your shopping cart is empty.")

Mẫu này giúp bạn tránh lỗi hoặc xử lý không cần thiết khi không có gì để làm việc.

Cắt ngắn chuỗi dài

Nếu bạn xử lý dữ liệu người dùng nhập vào hoặc hiển thị nhãn, bạn có thể muốn giới hạn độ dài chuỗi. len() giúp bạn thực thi những giới hạn đó:

username = "superlongusername"

if len(username) > 10:
    username = username[:10]
    print(username)

Ở đây, bất kỳ tên người dùng nào dài hơn 10 ký tự sẽ được cắt ngắn.

Những lỗi thường gặp với len()

len() có thể gây khó cho bạn, ngay cả khi bạn đã có chút kinh nghiệm với Python:  

  • Thử dùng len() trên số nguyên hoặc số thực: Số không phải là tập hợp, nên chúng không có độ dài.

  • Quên rằng len() đếm mục, không đếm giá trị: Trong từ điển, len đếm số khóa—kể cả khi nhiều khóa trỏ đến cùng một giá trị.

  • Cho rằng len() hoạt động trên mọi thứ: Các lớp tùy chỉnh cần có phương thức __len__; nếu không, len() sẽ không biết phải làm gì.

Hãy cố ghi nhớ những quy tắc này để tiết kiệm thời gian gỡ lỗi.

Xử lý lỗi với len()

Vì len() có thể phát sinh TypeError nếu dùng sai, nên chuẩn bị mã của bạn cho khả năng này là điều khôn ngoan, đặc biệt khi làm việc với dữ liệu khó đoán. Khối try-except là cách đơn giản để xử lý lỗi một cách mượt mà:

data = 123

try:
    print(len(data))
except TypeError:
    print("Object has no length.")

Thay vì sập, chương trình của bạn giờ sẽ in ra một thông báo thân thiện. Khóa học Lập trình Hướng đối tượng trong Python của chúng tôi là nguồn tài nguyên tuyệt vời để bạn giỏi hơn ở những việc như thế này. 

Dùng len() với lớp tùy chỉnh

Quay lại với các lớp tùy chỉnh. Lớp tùy chỉnh là bất kỳ lớp nào bạn tự định nghĩa bằng từ khóa class—như khi bạn mô hình hóa thứ gì đó cụ thể cho chương trình của mình, chẳng hạn Team, Box, hoặc Library. Trước đó, bạn đã thấy len() hoạt động trên các kiểu dựng sẵn như danh sách và từ điển vì chúng triển khai một phương thức đặc biệt gọi là __len__(). Điều tương tự áp dụng cho các lớp của riêng bạn. Nếu bạn muốn len() hoạt động trên chúng, bạn cần tự định nghĩa __len__().

Tôi không cố làm bạn sa đà vào chi tiết kỹ thuật. Tôi nghĩ đáng để nhắc đến điều này vì nó quan trọng khi bạn xây dựng các vùng chứa dữ liệu tùy chỉnh nên hành xử giống các tập hợp gốc của Python. Bằng cách hỗ trợ len(), các đối tượng của bạn có thể tương tác tự nhiên hơn với phần còn lại của hệ sinh thái Python, bao gồm các hàm và thư viện khác.

Dưới đây là tóm tắt nhanh:

class Team:
    def __init__(self, players):
        self.players = players

    def __len__(self):
        return len(self.players)

my_team = Team(["Alice", "Bob", "Cathy"])
print(len(my_team))

Một lần nữa, len() trả về 3, là đáp án đúng vì đây là số lượng người chơi trong đội của bạn.

Kết luận

Lần tới khi bạn cần đếm, đo, hoặc xác minh kích thước của thứ gì đó trong Python, hãy nhớ rằng len() là một lựa chọn tuyệt vời.

Nhưng giờ khi đã đến cuối bài, tôi muốn nhắc thêm một điều quan trọng. Chúng ta tập trung vào một hàm, nhưng hầu như luôn có nhiều cách khác nhau để làm một việc trong Python. Chúng tôi có bài viết còn chỉ ra nhiều cách để tìm độ dài của danh sách, trong đó hàm len() chỉ là một lựa chọn: Kích thước Danh sách Python: 8 phương pháp khác nhau để tìm độ dài của danh sách trong Python.

Tiếp tục luyện tập các phương pháp mới. Đây là cách chắc chắn để giúp bạn trở thành một lập trình viên vững vàng hơn. Và hãy nhớ đăng ký lộ trình kỹ năng Lập trình Python của chúng tôi, lộ trình này sẽ dạy bạn cách tối ưu mã, viết hàm và bài kiểm thử, và còn nhiều hơn thế nữa.

Josef Waples

Tác giả

Josef Waples

Tôi là một cây bút và biên tập viên về khoa học dữ liệu, đã có bài đóng góp cho các nghiên cứu đăng trên tạp chí khoa học. Tôi đặc biệt quan tâm đến đại số tuyến tính, thống kê, R và các chủ đề tương tự. Tôi cũng chơi cờ vua khá thường xuyên! 

Chủ đề

Liên quan