Danh sách có thể được nối (concatenate) với các danh sách khác. Điều này có nghĩa là bạn có thể thêm nội dung của một danh sách vào danh sách khác. Các giá trị với kiểu dữ liệu khác, như số nguyên, không thể được nối với một danh sách.
Nếu bạn thử nối một số nguyên với một danh sách, trình thông dịch Python sẽ trả về lỗi TypeError: can only concatenate list (not "int") to list.
Trong hướng dẫn này, chúng ta nói về ý nghĩa của lỗi này và cách nó hoạt động. Chúng ta đi qua một ví dụ để giúp bạn khắc phục vấn đề này trong mã của mình.
TypeError: can only concatenate list (not "int") to list
Nối (concatenation) giúp dễ dàng thêm hai danh sách lại với nhau. Mặc dù bạn có thể sử dụng phương thức extend() để thêm một danh sách vào danh sách khác, nối chỉ yêu cầu sử dụng một ký hiệu: dấu cộng (+).
Danh sách không phải là đối tượng duy nhất có thể được nối. Bất kỳ đối tượng có thể lặp (iterable) nào, như từ điển hoặc tuple, cũng có thể được nối.
Hai đối tượng với kiểu dữ liệu khác nhau không thể được nối. Điều này có nghĩa là bạn không thể nối một danh sách với một từ điển, hoặc một số nguyên với một danh sách.
Bạn sẽ gặp lỗi TypeError: can only concatenate list (not "int") to list nếu bạn sử dụng nối để thêm một mục số nguyên đơn lẻ vào một danh sách.
Ví dụ minh họa
Chúng ta sẽ xây dựng một chương序 theo dõi số lượng đơn đặt hàng cho các loại bánh mì kẹp cụ thể tại một quán cà phê vào ngày thứ Sáu. Chúng ta muốn lọc ra tất cả các loại bánh mì kẹp được đặt hàng hơn 75 lần để xem loại nào phổ biến nhất.
Chúng ta bắt đầu bằng cách định nghĩa hai danh sách: một danh sách các loại bánh mì kẹp và một danh sách chứa số lượng đơn đặt hàng cho mỗi loại.
sandwiches = ["Egg and Cress", "Chicken Club", "Hummus and Tomato", "Cheese"] orders = [54, 77, 22, 98]
Danh sách của chúng ta được gán cho biến "sandwiches" và "orders". Tiếp theo, chúng ta định nghĩa một danh sách theo dõi số chỉ mục của các loại bánh mì kẹp được đặt hàng hơn 75 lần.
orders_75 = []
Lúc này, các danh sách này trống. Điều này là do chúng ta chưa tìm ra loại bánh mì kẹp nào được đặt hàng hơn 75 lần.
Tiếp theo, chúng ta lặp qua danh sách bánh mì kẹp và đơn đặt hàng để tìm ra loại nào được đặt hàng hơn 75 lần. Chúng ta có thể làm điều này bằng vòng lặp for:
for s in range(0, len(sandwiches)):
if orders[s] > 75:
orders_75 = orders_75 + s
Mã của chúng ta lặp qua mỗi số trong phạm vi từ 0 đến độ dài của danh sách "sandwiches". Nếu giá trị tương ứng trong danh sách "orders" cho một loại bánh mì kẹp lớn hơn 75, chúng ta thêm vị trí chỉ mục của loại bánh mì kẹp đó vào danh sách "orders_75".
Tiếp theo, chúng ta viết một vòng lặp for in ra các loại bánh mì kẹp được đặt hàng hơn 75 lần để kiểm tra xem chương trình có hoạt động không:
for o in orders_75:
print(sandwiches[o])
Chạy mã Python và xem điều gì xảy ra:
Traceback (most recent call last): File "main.py", line 9, inorders_75 = orders_75 + s TypeError: can only concatenate list (not "int") to list
Mã của chúng ta trả về lỗi.
Giải pháp
Hãy xem dòng mã được đề cập trong thông báo lỗi:
orders_75 = orders_75 + s
Chúng ta đang cố gắng nối một giá trị số nguyên vào danh sách. Chúng ta không thể làm điều này vì nối chỉ hoạt động trên các đối tượng có thể lặp cùng kiểu dữ liệu.
Để khắc phục lỗi này, chúng ta phải sử dụng phương thức append() để thêm một mục vào danh sách. Phương thức này được thiết kế đặc biệt để thêm mục vào danh sách. Mục có thể là bất kỳ kiểu dữ liệu nào, như từ điển, số nguyên hoặc số thực.
Thay đổi dòng mã orders_75 để sử dụng phương thức append():
orders_75.append(s)
Chúng ta không cần gán bất kỳ giá trị nào cho "orders_75" vì phương thức append() thêm mục vào danh sách ngay tại chỗ. Thực thi mã:
Chicken Club Cheese
Mã in ra danh sách các loại bánh mì kẹp được đặt hàng hơn 75 lần. Có hai loại bánh mì kẹp đáp ứng tiêu chí này: Chicken Club và Cheese.
Kết luận
Lỗi TypeError: can only concatenate list (not "int") to list xảy ra khi bạn thử nối một số nguyên vào một danh sách.
Lỗi này xảy ra vì chỉ danh sách mới có thể nối với danh sách. Để khắc phục lỗi này, hãy sử dụng phương thức append() để thêm một mục vào danh sách.
Bây giờ bạn đã sẵn sàng giải quyết lỗi Python này như một chuyên gia!