Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Ở bài viết này, chúng ta sẽ cùng đi tìm hiểu về Tuple trong Python, cách sử dụng chúng như thế nào, và sự khác biệt giữa Tuple và List là gì? Tất cả những nội dung trong bài đọc sẽ đều có ví dụ minh hoạ cụ thể, hi vọng các bạn đọc có thể dễ dàng theo dõi cũng như tiếp thu được những kiến thức mà mình mong muốn!

1. Tuple là gì trong Python?

Tuple trong Python là một kiểu dữ liệu dùng để lưu trữ các đối tượng có thứ tự và bất biến. Cách lưu trữ của nó cũng khá giống với kiểu dữ liệu List. Tuy nhiên, sự khác biệt giữa List và Tuple, đó là List có thể thay đổi (mutability) trong khi Tuple là bất biến (immutability).

2.  Một số ưu điểm của Tuple so với List

Vì Tuple khá giống với List, nên chúng thường được sử dụng trong các case tương tự nhau. Tuy nhiên, có một số lợi thế nhất định mà một Tuple cung cấp tốt hơn so với một List. Dưới đây là một số ưu điểm chính:

  • Chúng ta thường sử dụng tuple cho các kiểu dữ liệu không đồng nhất và sử dụng list cho các kiểu dữ liệu đồng nhất.
  • Vì các tuple là bất biến, nên việc lặp qua các phần tử của tuple nhanh hơn so với list.
  • Tuple chứa các phần tử bất biến có thể được sử dụng làm key cho dictionary. Trong khi đó, list lại không thể làm được điều này.
  • Nếu bạn có dữ liệu không thay đổi, việc triển khai nó dưới dạng tuple sẽ đảm bảo rằng nó sẽ được chống ghi (write-protected).

3. Tạo một Tuple

Tuple thường được sử dụng cho các dữ liệu không cho phép sửa đổi. Chúng được tạo ra bằng cách đặt tất cả các items/elements bên trong dấu ngoặc đơn () và được phân tách bằng dấu phẩy , .

# Different types of tuples

# Empty tuple
my_tuple = ()
print(my_tuple)

# Tuple having integers
my_tuple = (1, 2, 3)
print(my_tuple)

# tuple with mixed data types
my_tuple = (1, "Hello", 3.4)
print(my_tuple)

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

Output:

()

(1, 2, 3)

(1, 'Hello', 3.4)

('mouse', [8, 4, 6], (1, 2, 3))

Một Tuple cũng có thể được tạo mà không cần sử dụng dấu ngoặc đơn, được gọi là tuple packing.

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

# tuple unpacking is also possible
a, b, c = my_tuple

print(a)      # 3
print(b)      # 4.6
print(c)      # dog

Output:

(3, 4.6, 'dog')

3

4.6

dog

Để viết một tuple chứa một giá trị duy nhất, bạn bắt buộc phải thêm một dấu phẩy đằng sau giá trị đó:

my_tuple = ("hello")
print(type(my_tuple))  # <class 'str'>

# Creating a tuple having one element
my_tuple = ("hello",)
print(type(my_tuple))  # <class 'tuple'>

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

Output:

<class 'str'>

<class 'tuple'>

<class 'tuple'>

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

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

Index (chỉ mục) của Tuple

Sử dụng toán tử index [] để truy cập vào một phần tử của tuple. Index bắt đầu từ 0, nên một tuple có 6 phần tử sẽ có index từ 0 đến 5. Truy cập vào phần tử có index khác index của tuple sẽ làm phát sinh lỗi IndexError. Index phải là một số nguyên, không thể sử dụng float, hay kiểu dữ liệu khác, sẽ tạo lỗi TypeError.

# Accessing tuple elements using indexing
my_tuple = ('p','e','r','m','i','t')

print(my_tuple[0])   # 'p' 
print(my_tuple[5])   # 't'

# IndexError: list index out of range
# print(my_tuple[6])

# Index must be an integer
# 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
print(n_tuple[0][3])       # 's'
print(n_tuple[1][1])       # 4

Output:

p

t

s

4

Index (chỉ mục) âm

Python cho phép lập chỉ mục âm cho các chuỗi. Index -1 là phần tử cuối cùng, -2 là phần tử thứ 2 từ cuối cùng lên,…. Nói đơn giản là index âm dùng khi bạn đếm phần tử của chuỗi ngược từ cuối lên đầu.

# Negative indexing for accessing tuple elements
my_tuple = ('p', 'e', 'r', 'm', 'i', 't')

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

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

Output:

t

p

Slicing (Cắt lát)

Chúng ta có thể truy cập một loạt các phần tử trong một tuple trong Python bằng cách sử dụng dấu hai chấm : của toán tử cắt (Slicing).

# Accessing tuple elements using slicing
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[:])

Output:

('r', 'o', 'g')

('p', 'r')

('i', 'z')

('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

5. Thay đổi phần tử Tuple

Không giống như List, Tuple không thể thay đổi. Đ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 đã được gán. Nhưng, nếu bản thân phần tử đó là một kiểu dữ liệu có thể thay đổi (như list chẳng hạn) thì các phần tử lồng nhau có thể được thay đổi. Chúng ta cũng có thể gán giá trị khác cho tuple (gọi là gán lại – reassignment).

# Changing tuple values
my_tuple = (4, 2, 3, [6, 5])


# TypeError: 'tuple' object does not support item assignment
# my_tuple[1] = 9

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

# Tuples can be reassigned
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# Output: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple)

Output:

(4, 2, 3, [9, 5])

('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

Ngoài ra, chúng ta có thể sử dụng toán tử + để kết hợp hai tuple, hoặc cũng có thể lặp lại các phần tử trong một tuple với một số lần nhất định bằng cách sử dụng toán tử *. Cả hai phép toán +* đều dẫn đến một tuple mới.

# Concatenation
# Output: (1, 2, 3, 4, 5, 6)
print((1, 2, 3) + (4, 5, 6))

# Repeat
# Output: ('Repeat', 'Repeat', 'Repeat')
print(("Repeat",) * 3)

Output:

(1, 2, 3, 4, 5, 6)

('Repeat', 'Repeat', 'Repeat')

6. Xóa phần tử Tuple

Như đã thảo luận ở trên, chúng ta không thể thay đổi các phần tử trong một tuple. Điều này có nghĩa là, bạn không thể xóa hoặc loại bỏ các giá trị ra khỏi một tuple mà chỉ có thể xóa cả tuple đi mà thôi.

Để xóa một hay nhiều tuple thì chúng ta sử dụng hàm del

# Deleting tuples
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# can't delete items
# TypeError: 'tuple' object doesn't support item deletion
# del my_tuple[3]

# Can delete an entire tuple
del my_tuple

# NameError: name 'my_tuple' is not defined
print(my_tuple)

Output:

Traceback (most recent call last):

  File "<string>", line 12, in <module>

NameError: name 'my_tuple' is not defined

7. Phương thức dùng với Tuple trong Python

Rõ ràng, phương thức thêm phần tử và xóa phần tử không thể sử dụng với tuple. Tuy nhiên,  có 2 phương thức sau bạn có thể ghi nhớ để sử dụng:

  • count(x): Đếm số phần tử x trong tuple
  • index(x): Trả về giá trị index của phần tử x đầu tiên mà nó gặp trong tuple
my_tuple = ('a', 'p', 'p', 'l', 'e',)

print(my_tuple.count('p'))  # Output: 2
print(my_tuple.index('l'))  # Output: 3

Output

2

3

8. Kiểm tra phần tử trong Tuple

Bạn có thể kiểm tra xem một phần tử đã tồn tại trong tuple hay chưa với từ khóa in.

# Membership test in tuple
my_tuple = ('a', 'p', 'p', 'l', 'e',)

# In operation
print('a' in my_tuple)
print('b' in my_tuple)

# Not in operation
print('g' not in my_tuple)

Output:

True

False

True

9. Lặp qua các phần tử của Tuple trong Python

Sử dụng vòng lặp for để lặp qua các phần tử trong tuple:

# Using a for loop to iterate through a tuple
for name in ('John', 'Kate'):
    print("Hello", name)

Output:

Hello John

Hello Kate


Với nội dung bài viết này, bạn đã phần nào nắm bắt được những nội dung quan trọng về tuple trong Python rồi chứ? Hãy cùng chờ đón những bài viết tiếp theo của Got It về các kiến thức khác trong lập trình nói riêng cũng như công nghệ nói chung nhé!

Nguồn: programiz.com

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
November 04, 2021
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan

Các bước tạo một thư viện Python

Tác giả: Minh (Software Engineer | CAI) Trong Tech Blog số này, Got It sẽ cùng bạn tìm hiểu về 6 bước để tạo và phân phối một thư viện Python. Cụ thể, chúng ta sẽ viết một CLI command tương tự cowsay cùng với một function để các package khác có thể import và […]

Sử dụng pre-commit để thực thi PEP8 chỉ trong 3 bước

Tác giả: Kiên (Software Engineer | CAI) Đảm bảo code tuân thủ đầy đủ các quy tắc được đề xuất trong PEP8 là một điều vô cùng quan trọng, đặc biệt là trong làm việc nhóm, khi mà yếu tố dễ đọc, dễ hiểu, và dễ bảo trì code được đặt lên hàng đầu. Dẫu […]
Hướng dẫn cách triển khai và debug code Python trên Docker

Hướng dẫn cách triển khai và debug code Python trên Docker

Tác giả: Kiên (Software Engineer | CAI) Bạn đã bao giờ mất hàng tiếng đồng hồ, thậm chí vài ngày để cài đặt một số thư viện cần thiết cho việc chạy một project trên máy tính của mình chưa? Nếu có thì đây là bài viết dành cho bạn. Thông thường, khi bạn tham […]
Readable Code

Readable Code

Tác giả: Minh (Software Engineer, CAI) & Hương (TPM, CAI) Mục lục1. Readable code là gì?2. Làm thế nào để viết code dễ đọc?2.1. Style guide2.2. Viết function nhỏ, tập trung vào một tính năng2.3. Đặt tên hợp lý2.3.1. Dùng các tiền tố thích hợp để phân loại function2.3.2. Hạn chế thêm thông tin về […]
Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Ở bài viết này, chúng ta sẽ cùng đi tìm hiểu về Tuple trong Python, cách sử dụng chúng như thế nào, và sự khác biệt giữa Tuple và List là gì? Tất cả những nội dung trong bài đọc sẽ đều có ví dụ minh hoạ cụ thể, hi vọng các bạn đọc có […]
Anaconda là gì? Tìm hiểu nền tảng Khoa học dữ liệu phổ biến nhất

Anaconda là gì? Tìm hiểu nền tảng Khoa học dữ liệu phổ biến nhất

Để có thể tạo nên một ứng dụng của riêng mình, điều quan trọng nhất đó là phải thiết lập môi trường làm việc đúng cách. Vì vậy, bạn cần các công cụ để xử lý dữ liệu, xây dựng các mô hình và biểu diễn trên đồ thị. Việc sử dụng nhiều công cụ […]