Kiểu dữ liệu Tuple trong Python

Sơ lược Date/Time trong Python

Trong bài viết này chúng ta sẽ tìm hiểu mọi thứ về kiểu dữ liệu Tuple trong Python. Cụ thể hơn sẽ bàn về Tuple là gì, cách tạo Tuple, khi nào nên sử dụng Tuple và các phương thức liên quan.

1. Kiểu dữ liệu tuple là gì?

Trong Python, kiểu dữ liệu Tuple tương tự như list, sự khác biệt giữa chúng là ta không thể thay đổi các phần tử của một tuple, trừ khi phần tử đó là một List.

Ưu điểm của Tuple so với List

Các phần tử của Tuple rất giống với List nên về cơ bản cả hai đều có thể sử dụng trong một tình huống tương tự nhau. Tuy nhiên vẫn có một số lợi thế của Tuple so với List, và dưới đây là các ưu điểm:

  • Chúng tôi thường sử dụng Tuple cho các kiểu dữ liệu không đồng nhất (khác nhau) và List cho các kiểu dữ liệu đồng nhất (tương tự).
  • Vì tuple là bất biến, nên việc lặp qua tuple nhanh hơn so với List.
  • Tuple có thể được sử dụng làm khóa cho Dictionary. Với List thì điều này là không thể.
  • Nếu bạn có dữ liệu ít thay đổi, việc triển khai nó dưới dạng Tuple sẽ đảm bảo rằng nó vẫn được bảo vệ chống ghi.

2. Cách tạo một Tuple trong Python

Một tuple được tạo bằng cách đặt tất cả các mục (phần tử) bên trong dấu ngoặc đơn (), được phân tách bằng dấu phẩy. Các dấu ngoặc là tùy chọn có hoặc không nhưng tốt nhất là sử dụng nó.

Cú pháp
my_tuple = (element1, element2, ...)

Một tuple có thể có nhiều phần tử và mỗi phần tử có thể thuộc các kiểu dữ liệu khác nhau (int, float, list, string, v.v.).

Xem thêm: Kiểu dữ liệu List (array) trong Python

Ví dụ
# Output: ("mouse", [8, 4, 6], (1, 2, 3))
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)

# tuple can be created without parentheses
# also called tuple packing
# Output: 3, 4.6, "dog"

my_tuple = 3, 4.6, "dog"
print(my_tuple)

# tuple unpacking is also possible
# Output:
# 3
# 4.6
# dog
a, b, c = my_tuple
print(a)
print(b)
print(c)

Việc tạo một Tuple chỉ có một phần tử sẽ phức tạp hơn một xíu, bởi vì trường hợp này thì Python sẽ dễ bị nhầm lẫn sang kiểu string, vì vậy ta phải bổ sung thêm dấu phẩy ở cuối để trình biên dịch Python nhận biết đó là một Tuple.

Ví dụ
# only parentheses is not enough
# Output: <class 'str'>
my_tuple = ("hello")
print(type(my_tuple))

# need a comma at the end
# Output: <class 'tuple'>
my_tuple = ("hello",)  
print(type(my_tuple))

# parentheses is optional
# Output: <class 'tuple'>
my_tuple = "hello",
print(type(my_tuple))

3. Truy cập các phần tử trong Tuple

Có nhiều cách khác nhau để truy cập các phần tử của một tuple.

Indexing

Chúng ta có thể sử dụng toán tử chỉ mục [] để truy cập một mục trong một tuple nơi chỉ mục bắt đầu từ 0. Ví dụ một tuple có 6 phần tử sẽ có chỉ số từ 0 đến 5, nên nếu bạn cố gắng truy cập đến cá phần tử khác như (6, 7, …) thì sẽ gây ra lỗi IndexError.

Chỉ mục phải là một số nguyên (int), vì vậy bạn không thể sử dụng kiểu float hoặc các loại khác, điều này sẽ dẫn đến TypeError.

Tương tự, tuple lồng nhau được truy cập bằng cách sử dụng lập chỉ mục lồng nhau, như trong ví dụ dưới đây.

my_tuple = ('p','e','r','m','i','t')

# Output: 'p'
print(my_tuple[0])

# Output: 't'
print(my_tuple[5])

# index must be in range
# If you uncomment line 14,
# you will get an error.
# IndexError: list index out of range

#print(my_tuple[6])

# index must be an integer
# If you uncomment line 21,
# you will get an error.
# TypeError: list indices must be integers, not float

#my_tuple[2.0]

# nested tuple
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))

# nested index
# Output: 's'
print(n_tuple[0][3])

# nested index
# Output: 4
print(n_tuple[1][1])

Negative Indexing

Python cho phép lập chỉ mục số âm, chỉ số -1 đề cập đến phần tử cuối cùng, -2 cho phần tử cuối cùng thứ hai, v.v.

my_tuple = ('p','e','r','m','i','t')

# Output: 't'
print(my_tuple[-1])

# Output: 'p'
print(my_tuple[-6])

Slicing

Chúng ta có thể truy cập vào một loạt các phần tử trong một tuple bằng cách sử dụng toán tử slicing dấu hai chấm “:”.

Ví dụ
my_tuple = ('p','r','o','g','r','a','m','i','z')

# elements 2nd to 4th
# Output: ('r', 'o', 'g')
print(my_tuple[1:4])

# elements beginning to 2nd
# Output: ('p', 'r')
print(my_tuple[:-7])

# elements 8th to end
# Output: ('i', 'z')
print(my_tuple[7:])

# elements beginning to end
# Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple[:])

Slicing có thể được xem là tốt nhất nếu bạn dùng nó để lấy một dãy các phần tử trong Tuple.

4. Thay đổi Tuple

Không giống như list, bạn không thể thay đổi các phần tử của Tuple, điều này có nghĩa là các phần tử của một tuple không thể thay đổi một khi nó đã được chỉ định. Nhưng, nếu phần tử tự nó là một kiểu dữ liệu giống như List ta có thể thay đổi được.

Ví dụ
my_tuple = (4, 2, 3, [6, 5])

# we cannot change an element
# If you uncomment line 8
# you will get an error:
# TypeError: 'tuple' object does not support item assignment

#my_tuple[1] = 9

# but item of mutable element can be changed
# Output: (4, 2, 3, [9, 5])
my_tuple[3][0] = 9
print(my_tuple)

# tuples can be reassigned
# Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
my_tuple = ('p','r','o','g','r','a','m','i','z')
print(my_tuple)

5. Xóa Tuple

Như đã thảo luận ở trên, chúng ta không thể thay đổi các thành phần trong một tuple. Điều đó cũng có nghĩa là chúng ta không thể xóa các phần tử của nó, nhưng hoàn toàn có thể xóa một tuple bằng cách sử dụng từ khóa del.

Ví dụ
my_tuple = ('p','r','o','g','r','a','m','i','z')

# can't delete items
# if you uncomment line 8,
# you will get an error:
# TypeError: 'tuple' object doesn't support item deletion

#del my_tuple[3]

# can delete entire tuple
# NameError: name 'my_tuple' is not defined
del my_tuple
my_tuple

6. Các phương thức trong Tuple

Trong lớp đối tượng Tuple hỗ trợ hai phương thức, đó là:

Method Description
count(x) Đếm số lần xuất hiện của một phần tử
index(x) Trả về chỉ mục của phần tử cần tìm

7. Một vài thao tác khác với Tuple

Sau đây là một vài thao tác khác với Tuple thường gặp nhất.

Kiểm tra phần tử có xuất hiện trong Tuple

Để kiểm tra một phần tử có xuất hiện trong tuple không thì ta dùng toán tử in.

Ví dụ
my_tuple = ('a','p','p','l','e',)

# In operation
# Output: True
print('a' in my_tuple)

# Output: False
print('b' in my_tuple)

# Not in operation
# Output: True
print('g' not in my_tuple)

Duyệt qua từng phần tử của Tuple

Để lặp qua từng phần tử của Tuple thì ta có thể sử dụng vòng lặp for.

Vi dụ
# Output: 
# Hello John
# Hello Kate
for name in ('John','Kate'):
     print("Hello",name)   

Ngoài ra vẫn còn một vài function khác thuộc lớp Build-in function.

Leave a Reply

Your email address will not be published. Required fields are marked *