Danh sách Python so với Tuples (Có ví dụ)

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 5cho list_num tại chỉ mục 2và chúng tôi tìm thấy 5tại chỉ mục 2trong đầu ra. Ngoài ra, chúng tôi đã gán 5cho tup_num tại chỉ mục 2và 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

  1. 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.
  2. 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.
  3. 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ớ:

  1. 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 ().
  2. Danh sách có độ dài thay đổi, tuple có độ dài cố định.
  3. Danh sách có tính chất biến đổi, tuple có tính chất bất biến.
  4. Danh sách có nhiều chức năng hơn bộ tuple.

thú vị bài viết...