Dẫn nhập
Trong các bài trước, Kteam đã giới thiệu đến bạn KIỂU DỮ LIỆU LIST, một container tuyệt vời trong Python
Ở bài này Kteam sẽ giới thiệu tới bạn một container khác đó chính KIỂU DỮ LIỆU TUPLE trong Python KIỂU DỮ LIỆU TUPLE trong Python
Nội dung
Để đọc hiểu bài này tốt nhất bạn cần:
- Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON.
- Xem qua bài CÁCH CHẠY CHƯƠNG TRÌNH PYTHON.
- Nắm CÁCH GHI CHÚ và BIẾN TRONG PYTHON.
- KIỂU DỮ LIỆU SỐ và KIỂU DỮ LIỆU CHUỖI trong Python.
- KIỂU DỮ LIỆU LIST trong Python
Bạn và Kteam sẽ cùng tìm hiểu những nội dung sau đây
- Giới thiệu về Tuple trong Python.
- Cách khởi tạo Tuple.
- Một số toán tử với Tuple trong Python.
- Indexing và cắt Tuple trong Python.
- Thay đổi nội dung Tuple trong Python.
- Ma trận.
- Tuple có phải luôn luôn là một Hash object?
- Các phương thức của Tuple.
- Khi nào thì chọn Tuple thay cho List?
Giới thiệu về Tuple trong Python
Tuple là một container cũng được sử dụng rất nhiều trong các chương trình Python không thua kém gì List. [List đã được giới thiệu trong bài KIỂU DỮ LIỆU LIST TRONG PYTHON] là một container cũng được sử dụng rất nhiều trong các chương trình Python không thua kém gì List. [List đã được giới thiệu trong bài KIỂU DỮ LIỆU LIST TRONG PYTHON]
Một Tuple gồm các yếu tố sau:
- Được giới hạn bởi cặp ngoặc [], tất cả những gì nằm trong đó là những phần tử của Tuple.[], tất cả những gì nằm trong đó là những phần tử của Tuple.
- Các phần tử của Tuple được phân cách nhau ra bởi dấu phẩy [,].,].
- Tuple có khả năng chứa mọi giá trị, đối tượng trong Python.
Ví dụ:
>>> [1, 2, 3, 4, 5] # Một Tuple chứa 5 số nguyên
[1, 2, 3, 4, 5]
>>> ['k', 't', 'e', 'r'] # Một Tuple chứa 4 chuỗi
['k', 't', 'e', 'r']
>>> [[1, 2], [3, 4]] # Một Tuple chứa 1 List là [1, 2] và 1 Tuple là [3, 4]
[[1, 2], [3, 4]]
>>> [1, 'kteam', [2, 'k9']] # Tuple chứa số nguyên, chuỗi, và List
[1, 'kteam', [2, 'k9']]
Cách khởi tạo Tuple
Sử dụng cặp dấu ngoặc [] và đặt giá trị bên trong
Cú pháp:
[, , .., , ]
Ví dụ:
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
Cách khởi tạo Tuple
>>> tup = [9] # Tuple có một giá trị là số 9
>>> tup # có kết quả lạ
9
>>> type[tup] # không thuộc lớp Tuple
>>> str_tup = ['howkteam'] # thử một trường hợp khác
>>> str_tup
'howkteam'
>>> type[tup]
Sử dụng cặp dấu ngoặc [] và đặt giá trị bên trong
- Cú pháp:
[, , .., , ]
- Bạn hãy chú ý khi khởi tạo tuple với một giá trị.
>>> 1 + 3 * 2 # 3 * 2 sau đó + 1 vì nhân trước cộng sau theo như toán học
7
>>> [1 + 3] * 3 # giờ thi ta sẽ làm phép tính trong ngoặc trước
12
Vì sao khi khởi tạo một Tuple với một phần tử thì kiểu kiểu dữ liệu của Tuple đó lại là kiểu dữ liệu của phần tử duy nhất đó?
>>> tup = [9,]
>>> tup
[9,]
>>> type[tup] # kết quả đã như mong đợi
Đó là do khi bạn viết một giá trị nào đó đặt trong cặp dấu ngoặc đơn thì nó được xem là một giá trị.
Vì sao lại phải xem là một giá trị?
>>> tup = [value for value in range[3]]
>>> tup
Vì khi ta tính toán, hay sử dụng cặp ngoặc [] để được ưu tiên.Generator Expression [Kteam sẽ giới thiệu trong tương lai].
Thế nên, trường hợp đó không thể tính là một Tuple. Do đó, khi muốn khởi tạo một Tuple chỉ duy nhất một phần tử, ta phải thêm dấu `,` vào sau giá trị đó, để báo cho Python biết, đây là Tuple.
Sử dụng Tuple Comprehension
Cú pháp:
tuple[iterable]iterable]
[, , .., , ] Giống hoàn toàn với việc bạn sử dụng constructor List. Khác biệt duy nhất là constructor Tuple sẽ tạo ra một Tuple.
>>> tup = tuple[[1, 2, 3]]
>>> tup
[1, 2, 3]
>>> str_tup = tuple['KTEAM']
>>> str_tup
['K', 'T', 'E', 'A', 'M']
>>> generator = [value for value in range[10] if value % 2 == 0]
>>> generator # bạn không cần phải cố gắng hiểu khi chưa rõ comprehension
>>> tuple[generator]
[0, 2, 4, 6, 8]
>>> tuple[123]
Traceback [most recent call last]:
File "", line 1, in
TypeError: 'int' object is not iterable
Bạn hãy chú ý khi khởi tạo tuple với một giá trị.
Vì sao khi khởi tạo một Tuple với một phần tử thì kiểu kiểu dữ liệu của Tuple đó lại là kiểu dữ liệu của phần tử duy nhất đó?hash object [immutable như chuỗi, Tuple] và unhash object [mutable như List]
Đó là do khi bạn viết một giá trị nào đó đặt trong cặp dấu ngoặc đơn thì nó được xem là một giá trị.
>>> tup = [1, 2]
>>> tup += ['how', 'kteam']
>>> tup
[1, 2, 'how', 'kteam']
Vì sao lại phải xem là một giá trị?
>>> tup = tuple['kter'] * 3
>>> tup
['k', 't', 'e', 'r', 'k', 't', 'e', 'r', 'k', 't', 'e', 'r']
>>> [1,] * 0
[]
>>> [1,] * 3
[1, 1, 1]
Vì khi ta tính toán, hay sử dụng cặp ngoặc [] để được ưu tiên.
>>> 1 in [1, 2, 3]
True
>>> 4 in ['k', 'kteam', 9]
False
Thế nên, trường hợp đó không thể tính là một Tuple. Do đó, khi muốn khởi tạo một Tuple chỉ duy nhất một phần tử, ta phải thêm dấu `,` vào sau giá trị đó, để báo cho Python biết, đây là Tuple.
Sử dụng Tuple Comprehension
Mà đó được coi là Generator Expression [Kteam sẽ giới thiệu trong tương lai].
Đối tượng được tạo từ Generator Expression cũng là một dạng iterable.hash object [immutable]. Do đó việc bạn muốn thay đổi nội dung của nó trên lí thuyết là không.
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
1Sử dụng constructor Tuple
Công dụng: Giống hoàn toàn với việc bạn sử dụng constructor List. Khác biệt duy nhất là constructor Tuple sẽ tạo ra một Tuple.
Một số toán tử với Tuple trong Python
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
2Các toán tử của Tuple giống với toán tử của chuỗi. Nếu bạn đọc kĩ phần này ở bài List thì bạn sẽ thấy Kteam đề cập là toán tử của List chỉ là gần giống với toán tử của chuỗi. Lí do vì sao sẽ được giải thích trong bài sự khác biệt các toán tử của hash object [immutable như chuỗi, Tuple] và unhash object [mutable như List]
Toán tử +hash object là một đối tượng bạn không thể thay đổi nội dung của nó. Và trong phần thay đổi nội dung Tuple, bạn cũng thấy ta không thể thay đổi giá trị ở bên trong Tuple. Tuy nhiên, không phải lúc nào cũng vậy.
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
3Toán tử *unhash object. Suy ra, ta có thể thay đổi nội dung của nó.
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
4Toán tử in
Indexing và cắt Tuple trong Python
Indexing và cắt Tuple hoàn toàn tương tự như với kiểu dữ liệu List. [Nếu chưa biết về List bạn có thể tham khảo qua các bài về KIỂU DỮ LIỆU LIST TRONG PYTHON]
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
0
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
Cú pháp:
.count[value].count[value]
[, , .., , ] Trả về một số nguyên, chính là số lần xuất hiện của value trong Tuple.
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
5Bạn hãy chú ý khi khởi tạo tuple với một giá trị.
Cú pháp:
[, , .., , ].index[sub[, start[, end]]]
Bạn hãy chú ý khi khởi tạo tuple với một giá trị.Tương tự phương thức index của kiểu dữ liệu chuỗi.
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
6Khi nào thì chọn Tuple thay cho List?
Giới thiệu về Tuple trong Python
- Tuple là một container cũng được sử dụng rất nhiều trong các chương trình Python không thua kém gì List. [List đã được giới thiệu trong bài KIỂU DỮ LIỆU LIST TRONG PYTHON]của Tuple nhanh hơn so với List
- Dung lượng chiếm trong bộ nhớ của Tuple nhỏ hơn so với List chiếm trong bộ nhớ của Tuple nhỏ hơn so với List
- Bảo vệ dữ liệu của bạn sẽ không bị thay đổi
- Có thể dùng làm key của Dictonary [một kiểu dữ liệu sẽ được giới thiệu]. Điều mà List không thể vì List là unhash object.
Những điểm trên là những điều giúp bạn có thể cân nhắc việc chọn Tuple hay List để lưu dữ dữ liệu dưới một mảng.
Củng cố bài học
Đáp án bài trước
Bạn có thể tìm thấy câu hỏi của phần này tại CÂU HỎI CỦNG CỐ trong bài KIỂU DỮ LIỆU LIST TRONG PYTHON – Phần 2.
- Sẽ có lỗi IndexErrorIndexError
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
7- Không. Vì khi đó, ta phải so sánh hai List [1, 2] và ['abc', 'def']. Mà khi so sánh hai List này một cách trực tiếp. Python sẽ phải so sánh từng phần tử của mỗi hai List đó với nhau. Nhưng một bên là số, một bên là chuỗi, nên việc so sánh trực tiếp là không được.
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
8Câu hỏi củng cố
- Tìm các cách khởi tạo List hợp lệ dưới đấy
- tup = tuple[[1,2, 3] + [3, 4]]
- tup = [1]
- tup = 1
- tup = 1, 2
- Dự đoán kết quả của chương đoạn code dưới đây
>>> tup = [1, 2, 3, 4]
>>> tup
[1, 2, 3, 4]
>>> empty_tup = [] # khởi tạo tuple rỗng
>>> empty_tup
[]
>>> type[tup] # kiểu dữ liệu Tuple thuộc lớp tuple
9Lựa chọn phương án đúng
- tup = [1, 2, [3, 4, 50, 60]]
- TypeError: ‘tuple’ object does not support item assignment
- a và b đúng
Đáp án của phần này sẽ được trình bày ở bài tiếp theo. Tuy nhiên, Kteam khuyến khích bạn tự trả lời các câu hỏi để củng cố kiến thức cũng như thực hành một cách tốt nhất!
Kết luận
Bài viết này đã sơ lược cho các bạn KIỂU DỮ LIỆU TUPLE TRONG PYTHON.
Ở bài sau, Kteam sẽ nói về sự khác nhau giữa toán tử ở HASH OBJECT VÀ UNHASH OBJECT.
Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.Luyện tập – Thử thách – Không ngại khó”.
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.