Trong bài này chúng ta sẽ tìm hiểu những điểm khác biệt chính giữa List và Tuples cũng như cách sử dụng hai cấu trúc dữ liệu này.
Danh sách và Tuples lưu trữ một hoặc nhiều đối tượng hoặc giá trị theo một thứ tự cụ thể. Các đối tượng được lưu trữ trong một danh sách hoặc bộ dữ liệu có thể thuộc bất kỳ loại nào kể cả loại không có gì được xác định bởi Từ khóa Không có.
Lists và Tuples tương tự nhau trong hầu hết các ngữ cảnh nhưng có một số khác biệt mà chúng ta sẽ tìm thấy trong bài viết này.
Sự khác biệt về cú pháp
Cú pháp của danh sách và tuple hơi khác nhau. Danh sách được bao quanh bởi dấu ngoặc vuông ()
và Tuples được bao quanh bởi dấu ngoặc ()
.
Ví dụ 1.1: Tạo danh sách so với tạo Tuple
list_num = (1,2,3,4) tup_num = (1,2,3,4) print(list_num) print(tup_num)
Đầu ra:
(1,2,3,4) (1,2,3,4)
Ở trên, chúng ta đã định nghĩa một biến có tên list_num chứa một danh sách các số từ 1
đến 4
. Danh sách được bao quanh bởi dấu ngoặc ()
. Ngoài ra, chúng tôi đã xác định một biến tup_num; chứa nhiều số từ 1
đến 4
. Bộ giá trị được bao quanh bởi dấu ngoặc đơn ()
.
Trong python, chúng ta có type()
hàm cung cấp loại đối tượng được tạo.
Ví dụ 1.2: Tìm kiểu cấu trúc dữ liệu bằng hàm type ()
type(list_num) type(tup_num)
Đầu ra:
danh sách tuple
Danh sách có thể thay đổi so với Tuples bất biến
Danh sách có tính chất có thể thay đổi tức là, danh sách có thể được thay đổi hoặc sửa đổi sau khi tạo theo nhu cầu trong khi tuple có tính chất bất biến, tức là không thể thay đổi hoặc sửa đổi tuple sau khi tạo.
Ví dụ 2.1: Sửa đổi Danh sách mục so với Tuple
list_num(2) = 5 print(list_num) tup_num(2) = 5
Đầu ra:
(1,2,5,4) Traceback (lần gọi gần đây nhất): Tệp "python", dòng 6, trong TypeError: đối tượng 'tuple' không hỗ trợ gán mục
Trong đoạn mã trên, chúng tôi đã gán 5
cho list_num tại chỉ mục 2
và chúng tôi tìm thấy 5
tại chỉ mục 2
trong đầu ra. Ngoài ra, chúng tôi đã gán 5
cho tup_num tại chỉ mục 2
và chúng tôi đã nhận được type error
. Chúng tôi không thể sửa đổi tuple do bản chất bất biến của nó.
Lưu ý: Vì tuple là bất biến, chúng có kích thước cố định và danh sách có kích thước thay đổi.
Hoạt động có sẵn
Danh sách có nhiều chức năng nội trang hơn chức năng của tuple. Chúng ta có thể sử dụng dir((object))
hàm inbuilt để lấy tất cả các hàm liên quan cho list và tuple.
Ví dụ 3.1: Danh sách Thư mục
dir(list_num)
Đầu ra:
('__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem _' __gt__ ',' __hash__ ',' __iadd__ ',' __imul__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __new, '' , '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', append ' sao chép ',' đếm ',' mở rộng ',' chỉ mục ','insert ',' pop ',' remove ',' reverse ',' sort ')
Ví dụ 3.2: Thư mục Tuple
dir(tup_num)
Đầu ra:
('__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__ne', '_'_get__ne', '_'_get__ne' __gt__ ',' __hash__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne__ ',' __new__ ',' __reduce__ ',' _ ' , '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index')
Chúng ta có thể thấy rõ rằng, có rất nhiều chức năng bổ sung được liên kết với danh sách trên một tuple.Chúng tôi có thể thực hiện thao tác chèn và bật, xóa và sắp xếp các phần tử trong danh sách bằng các chức năng sẵn có trong Tuple.
So sánh kích thước
Thao tác Tuples có kích thước nhỏ hơn so với thao tác trong danh sách, điều này làm cho nó nhanh hơn một chút nhưng không phải đề cập đến nhiều cho đến khi bạn có một số lượng lớn các phần tử.
Ví dụ 5.1: Tính toán kích thước của Danh sách so với Tuple
a= (1,2,3,4,5,6,7,8,9,0) b= (1,2,3,4,5,6,7,8,9,0) print('a=',a.__sizeof__()) print('b=',b.__sizeof__())
Đầu ra:
a = 104 b = 120
Trong đoạn mã trên, chúng ta có tuple a và list b với các mục giống nhau nhưng kích thước của tuple nhỏ hơn danh sách.
Các trường hợp sử dụng khác nhau
Ngay từ cái nhìn đầu tiên, có vẻ như danh sách luôn có thể thay thế các bộ giá trị. Nhưng bộ giá trị là cấu trúc dữ liệu cực kỳ hữu ích
- Việc sử dụng một bộ tuple thay vì một danh sách có thể cung cấp cho người lập trình và thông dịch viên một gợi ý rằng không nên thay đổi dữ liệu.
- Tuples thường được sử dụng như một loại từ điển không có khóa để lưu trữ dữ liệu. Ví dụ,
(('Swordfish', 'Dominic Sena', 2001), ('Snowden', 'Oliver Stone', 2016), ('Taxi Driver', 'Martin Scorsese', 1976))
Ví dụ trên chứa các bộ giá trị bên trong danh sách có một danh sách các bộ phim. - Việc đọc dữ liệu đơn giản hơn khi các bộ giá trị được lưu trữ bên trong danh sách. Ví dụ,
((2,4), (5,7), (3,8), (5,9))
dễ đọc hơn((2,4), (5,7), (3,8), (5,9))
Tuple cũng có thể được sử dụng làm khóa trong từ điển do tính chất có thể băm và bất biến của chúng trong khi Danh sách không được sử dụng làm khóa trong từ điển vì danh sách không thể xử lý __hash__()
và có bản chất có thể thay đổi.
key_val= (('alpha','bravo'):123) #Valid key_val = (('alpha','bravo'):123) #Invalid
Những điểm chính cần nhớ:
- Cú pháp nghĩa đen của bộ giá trị được hiển thị bằng dấu ngoặc đơn
()
trong khi cú pháp nghĩa đen của danh sách được hiển thị bằng dấu ngoặc vuông()
. - Danh sách có độ dài thay đổi, tuple có độ dài cố định.
- Danh sách có tính chất biến đổi, tuple có tính chất bất biến.
- Danh sách có nhiều chức năng hơn bộ tuple.