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.
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.
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:
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))Được hỗ trợ bởi
Đ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))Được hỗ trợ bởi
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))Được hỗ trợ bởi
Đ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__:
Ở đâ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ụ:
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 inrange(len(fruits)):print(f"Index {i}: {fruits[i]}")Được hỗ trợ bở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Được hỗ trợ bởi
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 =[]iflen(cart)==0:print("Your shopping cart is empty.")Được hỗ trợ bởi
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"iflen(username)>10:
username = username[:10]print(username)Được hỗ trợ bởi
Ở đâ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 =123try:print(len(data))except TypeError:print("Object has no length.")Được hỗ trợ bởi
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.
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.
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!
Tiếp tục phát triển kỹ năng Khoa học Dữ liệu hiện đại của bạn bằng cách tìm hiểu về các cấu trúc lặp (iterators) và biểu thức danh sách (list comprehensions).
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ặplen()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:
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:
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:
Ở đâ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:Đ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: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:Đ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__:Ở đâ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ệuint) Python sẽ thông báo bằng một lỗiTypeError. Đâ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ụ:Điều này kích hoạt lỗi sau:
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:Đ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.
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:
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 đó:Ở đâ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 sinhTypeErrornế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à: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ạnTeam,Box, hoặcLibrary. Trước đó, bạn đã thấylen()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ốnlen()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:
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.