openplanning

Hướng dẫn và ví dụ Python Tuples

  1. Python Tuples
  2. So sánh List và Tuple
  3. Truy cập các phần tử của Tuples
  4. Cập nhập Tuples
  5. Các toán tử cơ bản cho Tuples
  6. Các hàm liên quan Tuples
  7. Các phương thức

1. Python Tuples

Trong Python, Tuples (bộ dữ liệu) là một dẫy (sequence) các giá trị, nó chứa nhiều phần tử (element), về cơ bản nó khá giống với List (danh sách). Nhưng khác với List, Tuples là một kiểu dữ liệu bất biến (immutable), mọi thao tác cập nhập trên Tuple đều tạo ra một thực thể mới trên bộ nhớ (memory).
Để viết một Tuple, bạn đặt các phần tử nằm trong cặp ngoặc ( ) và ngăn cách nhau bởi dấu phẩy. Các phần tử trong danh sách được đánh chỉ số (index) bắt đầu từ chỉ số 0.
tupleExample.py
fruitTuple = ("apple", "apricot", "banana","coconut", "lemen")
otherTuple = (100, "one", "two", 3)
print ("Fruit Tuple:")
print (fruitTuple)
print (" --------------------------- ")
print ("Other Tuple:")
print (otherTuple)
Output:
Fruit Tuple:
('apple', 'apricot', 'banana', 'coconut', 'lemen')
 ---------------------------
Other List:
(100, 'one', 'two', 3)

2. So sánh List và Tuple

List và Tuple đều là một dẫy (sequence) các phần tử. Chúng có các khác biệt sau:
  • Khi viết một List bạn sử dụng cặp dấu ngặc vuông [ ], trong khi viết một Tuple bạn sử dụng dấu ngặc tròn ( ).
# Đây là một Tuple.
aTuple = ("apple", "apricot", "banana")

# Đây là một List (Danh sách).
aList =  ["apple", "apricot", "banana"]
  • List là kiểu dữ liệu có thể biến đổi (mutable), bạn có thể sử dụng phương thức như append() để thêm phần tử vào List, hoặc sử dụng phương thức remove() để xóa các phần tử ra khỏi List mà không làm tạo ra thêm một thực thể 'List' khác trên bộ nhớ.
listMemoryTest.py
list1 =  [1990, 1991, 1992] 
print ("list1: ", list1)

# Địa chỉ của list1 trên bộ nhớ.
list1Address = hex ( id(list1) ) 
print ("Address of list1: ", list1Address ) 
print ("\n")
print ("Append element 2001 to list1")

# Nối (append) một phần tử vào list1.
list1.append(2001) 
print ("list1 (After append): ", list1)

# Địa chỉ của list1 trên bộ nhớ.
list1Address = hex ( id(list1) ) 
print ("Address of list1 (After append): ", list1Address )
  • Tuple là một đối tượng bất biến (immutable), nó không có các phương thức append(), remove(),.. như list. Một số phương thức, hoặc toán tử mà bạn nghĩ rằng nó dùng để cập nhập Tuple, nhưng không phải vậy, nó dựa trên Tuple ban đầu để tạo ra một Tuple mới.
tupleMemoryTest.py
tuple1 =  (1990, 1991, 1992)

# Địa chỉ của tuple1 trên bộ nhớ.
tuple1Address = hex ( id(tuple1) ) 
print ("Address of tuple1: ", tuple1Address )

# Nối một tuple vào tuple1.
tuple1 = tuple1 + (2001, 2002)

# Địa chỉ của tuple1 trên bộ nhớ.
tuple1Address = hex ( id(tuple1) )  
print ("Address of tuple1 (After concat): ", tuple1Address )
Output:
Address of tuple1: 0x9096751d80
Address of tuple1 (After concat): 0x9096778f10

3. Truy cập các phần tử của Tuples

Truy cập các phần tử
Sử dụng vòng lặp for để truy cập vào các phần tử của Tuple:
elementAccessExample.py
fruits = ("apple", "apricot", "banana", "coconut", "lemen", "plum", "pear")

for fruit in fruits :
    print ("Fruit: ", fruit)
Output:
Fruit: apple
Fruit: apricot
Fruit: banana
Fruit: coconut
Fruit: lemen
Fruit: plum
Fruit: pear
Truy cập thông qua chỉ số (index):
Bạn cũng có thể truy cập vào các phần tử của Tuple thông qua chỉ số. Các phần tử của Tuple được đánh chỉ chỉ từ trái sang phải, bắt đầu từ 0.
indexAccessExample.py
fruits = ("apple", "apricot", "banana", "coconut", "lemen", "plum", "pear") 
print ( fruits )

# Số phần tử.
print ("Element count: ", len(fruits) ) 

for i in range (0, len(fruits) ) : 
    print ("Element at ", i, "= ", fruits[i] )
    
# Một Tuple con chứa các phần tử từ index 1 đến 4 (1, 2, 3)
subTuple = fruits[1: 4]    
# ('apricot', 'banana', 'coconut')
print ("Sub Tuple [1:4] ", subTuple )
Output:
('apple', 'apricot', 'banana', 'coconut', 'lemen', 'plum', 'pear')
Element count: 7
Element at 0 = apple
Element at 1 = apricot
Element at 2 = banana
Element at 3 = coconut
Element at 4 = lemen
Element at 5 = plum
Element at 6 = pear
Sub Tuple [1:4]  ('apricot', 'banana', 'coconut')
Bạn cũng có thể truy cập vào các phần tử của Tuple theo chỉ số âm (Negative index), các phần tử được đánh chỉ số từ phải sang trái với các giá trị -1, -2, ...
indexAccessExample2.py
fruits = ("apple", "apricot", "banana", "coconut", "lemen", "plum", "pear")
print ( fruits )
print ("Element count: ", len(fruits) )

print ("fruits[-1]: ", fruits[-1])
print ("fruits[-2]: ", fruits[-2]) 
subTuple1 = fruits[-4: ]

print ("\n")
print ("Sub Tuple fruits[-4: ] ")
print (subTuple1) 
subTuple2  = fruits[-4:-2]
print ("\n")
print ("Sub Tuple fruits[-4:-2] ")
print (subTuple2)
Output:
('apple', 'apricot', 'banana', 'coconut', 'lemen', 'plum', 'pear')
Element count: 7
fruitList[-1]:  pear
fruitList[-2]:  plum  
 
Sub Tuple fruits[-4: ]  
('coconut', 'lemen', 'plum', 'pear')

Sub Tuple fruits[-4:-2]  
('coconut', 'lemen')

4. Cập nhập Tuples

Chú ý rằng Tuple là bất biến (immutable), vì vậy nó chỉ có các phương thức hoặc toán tử để truy cập, hoặc tạo ra một Tuple mới từ các Tuple ban đầu.
updateTupleExample.py
tuple1 = (1990, 1991, 1992) 
print ("tuple1: ", tuple1)  
print ("Concat (2001, 2002) to tuple1") 
 
tuple2 = tuple1 + (2001, 2002)  
print ("tuple2: ", tuple2)

# Một Tuple con, chứa các phần tử từ chỉ số 1 đến 4 (1,2,3)
tuple3 = tuple2[1:4] 
print ("tuple2[1:4]: ", tuple3)

# Một Tuple con, chứa các phần tử từ chỉ số 1 đến cuối.
tuple4 = tuple2[1: ] 
print ("tuple2[1: ]: ", tuple4)
Output:
tuple1: (1990, 1991, 1992)
Concat (2001, 2002) to tuple1
tuple2: (1990, 1991, 1992, 2001, 2002)
tuple2[1:4]: (1991, 1992, 2001)
tuple2[1: ]: (1991, 1992, 2001, 2002)

5. Các toán tử cơ bản cho Tuples

Cũng giống như String, Tuple có 3 toán tử +, * , in.
Toán tử
Mô tả
Ví dụ
+
Toán tử dùng để nối (concatenate) 2 Tuple để tạo ra một Tuple mới
(1, 2, 3) + ("One","Two")
--> (1, 2, 3, "One", "Two")
*
Toán tử dùng để nối nhiều bản sao chép của cùng một Tuple. Và tạo ra một Tuple mới
(1, 2) * 3
--> (1, 2, 1, 2, 1, 2)
in
Kiểm tra một phần tử nằm trong một Tuple hay không, kết quả trả về True hoặc False.
"Abc" in ("One", "Abc")
--> True
tupleOperatorsExample.py
tuple1 = (1, 2, 3)
tuple2 = ("One", "Two")
print ("tuple1: ", tuple1)
print ("tuple2: ", tuple2)
print ("\n")

tuple12 = tuple1 + tuple2
print ("tuple1 + tuple2: ", tuple12)
tuple2x3 = tuple2 * 3
print ("tuple2 * 3: ", tuple2x3)
hasThree = "Three" in tuple2
print ("'Three' in tuple2? ", hasThree)
Output:
tuple1: (1, 2, 3)
tuple2: ('One', 'Two')

tuple1 + tuple2: (1, 2, 3, 'One', 'Two')
list2 * 3: ('One', 'Two', 'One', 'Two', 'One', 'Two')
'Three' in tuple2? False

6. Các hàm liên quan Tuples

Hàm
Mô tả
cmp(list1, list2)
So sánh các phần tử của cả 2 Tuple. Hàm này đã bị loại bỏ khỏi Python3.
len(list)
Trả về số phần tử của danh sách
max(list)
Trả về phần tử trong Tuple với giá trị lớn nhất.
min(list)
Trả về phần tử trong Tuple với giá trị nhỏ nhất.
tuple(seq)
Chuyển đổi một List thành một Tuple.
tupleFunctionsExample.py
tuple1 = (1991, 1994, 1992)
tuple2 = (1991, 1994, 2000, 1992)
print ("tuple1: ", tuple1)
print ("tuple2: ", tuple2)

# Trả về số lượng phần tử trong danh sách.
print ("len(tuple1): ", len(tuple1) )
print ("len(tuple2): ", len(tuple2) )

# Giá trị lớn nhất trong Tuple.
maxValue = max(tuple1)
print ("Max value of tuple1: ", maxValue)

# Giá trị nhỏ nhất trong Tuple.
minValue = min(tuple1)
print ("Min value of tuple1: ", minValue)

# (all)
# List
list3 = [2001, 2005, 2012]
print ("list3: ", list3)

# Chuyển đổi một List thành tuple.
tuple3 = tuple (list3)
print ("tuple3: ", tuple3)
Output:
tuple1: (1991, 1994, 1992)
tuple2: (1991, 1994, 2000, 1992)
len(tuple1): 3
len(tuple2): 4
Max value of tuple1: 1994
Min value of tuple1: 1991
list3: [2001, 2005, 2012]
tuple3: (2001, 2005, 2012)
Xem thêm:
  • So sánh và sắp xếp trong Python

7. Các phương thức

Phương thức
Mô tả
tuple.count(obj)
Trả về số lần xuất hiện 'obj' trong Tuple
tuple.index(obj, [start, [stop]])
Trả về chỉ số nhỏ nhất trong danh sách tìm thấy phần tử có giá trị là obj. Ném ra ValueError nếu không tìm thấy.

Nếu có tham số start, stop, chỉ tìm từ chỉ số start đến chỉ số stop (Và không bao gồm stop).
Ví dụ:
tupleMethodsExample.py
years =  ( 1990 ,  1991 ,  1993 ,  1991 ,  1993 ,  1993 ,  1993 )
print ("Years: ", years)
print ("\n") 

# Trả về số lần xuất hiện của 1993
print ("years.count(1993): ",years.count(1993) ) 

# Tìm vị trí xuất hiện 1993
print ("years.index(1993): ", years.index(1993) )

# Tìm vị trí xuất hiện 1993, bắt đầu từ chỉ số 3
print ("years.index(1993, 3): ", years.index(1993, 3) )

# Tìm vị trí xuất hiện 1993, bắt đầu từ chỉ số 4 tới 5 (Không bao gồm 6)
print ("years.index(1993, 4, 6): ", years.index(1993, 4, 6) )
Output:
Years: (1990, 1991, 1993, 1991, 1993, 1993, 1993)

years.count(1993): 4
years.index(1993): 2
years.index(1993, 3): 4
years.index(1993, 4, 6): 4
Xem thêm:
  • So sánh và sắp xếp trong Python