Python 3

Giới thiệu về Tuple

Đăng bởi - Ngày 16-04-2018

Khái niệm Tuple

Tuple là một danh sách không thể chỉnh sửa, thêm hoặc xóa các phần tử một khi đã được tạo ra.

>>> loptinhoc = ('lớp tin A', 'lớp tin B', 'lớp tin C', 'lớp tin D') #1
>>> loptinhoc
('lớp tin A', 'lớp tin B', 'lớp tin C', 'lớp tin D')
>>> loptinhoc[0] #2
'lớp tin A'
>>> loptinhoc[-1] #3
'lớp tin D'
>>> loptinhoc[1:3] #4
('lớp tin B', 'lớp tin C')
  1. Để khai báo một tuple, bạn cần khai báo các phần tử trong cặp ngoặc tròn ()
  2. Các phần tử trong tuple được sắp xếp theo thứ tự, phần tử đầu tiên bắt đầu từ 0 giống như list
  3. Index số âm sẽ bắt đầu từ phần tử cuối giống như list
  4. Cắt phần tử cũng giống như list. Khi bạn cắt 1 phần tử trong tuple bạn sẽ được một tuple mới

Về cơ bản tuple và list giống nhau, nhưng điểm khác biệt lớn nhất đó chính là tuple không thể thay đổi phần tử. List có các phương thức như append(), extend(), insert(), remove() và pop(), trong khi tuple không được trang bị những method này.

Đọc tới đây có thể nhiều bạn sẽ thử xem nếu dùng các method của list vào tuple thì sẽ như thế nào, nhưng bạn cứ thử đi, python sẽ trả về cho bạn cả 1 tấn lỗi đó :)

>>> loptinhoc
('lớp tin A', 'lớp tin B', 'lớp tin C', 'lớp tin D')
>>> loptinhoc.append('lớp tin E') #1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
>>> loptinhoc.remove('lớp tin B') #2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'remove'
>>> loptinhoc.index('lớp tin C') #3
2
>>> "D" in loptinhoc #4
False
>>> "lớp tin D" in loptinhoc #5
True
  1. Ok, vì tuple không có append() hay extend() nên python không cho phép bạn sử dụng.
  2. remove() cũng vậy, bạn không thể xóa hay thêm phần tử sau khi tạo ra. Nhớ chứ?
  3. Aha, ít nhất thì index() có thể dùng trên tuple vì thứ tự các phần tử của tuple đã được gán từ khi tạo ra. Phần tử đầu tiên bắt đầu từ 0.
  4. in() có thể dùng trong tuple nhưng bạn không thể tìm chỉ với một phần trong chuỗi.
  5. Nếu bạn tìm với cả một giá trị của phần tử với in(), tuple sẽ trả về giá trị True cho bạn nếu giá trị đó có tồn tại trong tuple.

Vậy nếu như tuple quá tệ so với list, không cho phép bạn thêm, xóa, sửa như vậy thì tại sao python lại tạo ra nó? Tất nhiên là cái gì cũng có lý do của nó. Bạn sẽ cần/nên dùng tuple trong các trường hợp sau:

  • Tuple nhanh hơn list. Trong trường hợp bạn cần khai báo dữ liệu và lặp lại liên tục thì bạn nên dùng tuple
  • Khi bạn cần bảo vệ dữ liệu đã được khai báo, tránh bị chỉnh sửa thì đó là lúc tuple sẽ giúp bạn.
  • Đôi khi tuple có thể được sử dụng như một key của dictionary (Tại sao à? Vì tuple chứa những giá trị không đổi như chuỗi, số hoặc các tuple khác). List không thể nào dùng làm key của dictionary được bởi vì giá trị của list có thể thay đổi được.
  • Tupe có thể chuyển thành list được bằng function tuple() và ngược lại.

Dưới đây là một số tính năng khá hay của tuple, bạn có thể gán nhiều giá trị cùng lúc chỉ trong một dòng code

>>> loptinhoc
('lớp tin A', 'lớp tin B', 'lớp tin C', 'lớp tin D')
>>> (nguyenvana, lethib, tranvanc) = loptinhoc #1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)
>>> (nguyenvana, lethib, tranvanc, nguyenthiteo) = loptinhoc #2
>>> nguyenvana #3
'lớp tin A'
>>> lethib
'lớp tin B'
>>> tranvanc
'lớp tin C'
>>> nguyenthiteo
'lớp tin D'
  1. Khi bạn gán nhiều giá trị cùng lúc, bạn phải tạo đúng số phần tử với tuple cần gán nếu nhiều hơn hoặc ít hơn python sẽ báo lỗi
  2. Bạn cần tạo 4 phần tử để gán giá trị vì loptinhoc có 4 phần tử. Vậy các phần tử sẽ lần lượt gán tương ứng từ trái sang phải: nguyenvana = 'lớp tin A', lethib = 'lớp tin B'...
  3. Khi bạn gọi nguyenvana, lethib, tranvanc, nguyenthiteo bạn sẽ thấy python print ra các kết quả tương ứng

Bạn cũng có thể dùng tuple để gán các ngày trong tuần thông qua một ví dụ này và so sánh với code của PHP xem mức độ tiện lợi của python như thế nào. Chúng ta xem code PHP trước nha :)

<?php
$ngay = array('monday' => 0, 'tuesday' => 1, 'wednesday' => 2, 'thursday' => 3, 'friday' => 4, 'saturday' => 5, 'sunday' => 6);
echo $ngay['monday'].'<br />'; // ketqua: 0
echo $ngay['wednesday'].'<br />'; // ketqua: 2
?>

Bạn có thể xem trực tiếp php code tại đây: http://sandbox.onlinephpfunctions.com/code/285bc2b5f419d2807c8e3bf4f30f9c3f28a92801

Và bây giờ là code của python, các bạn cùng xem nha

>>> (monday, tuesday, wednesday, thursday, friday, saturday, sunday) = range(7) #1
>>> monday #2
0
>>> wednesday
2
>>> sunday
6

Bạn thấy đấy, chỉ một dòng code trên python thôi nhanh gọn lẹ hơn php rất nhiều. Trong python có rất nhiều built-in function giống như range, trên đây chỉ là một ví dụ nhỏ so sánh giữa hai loại code khác nhau. tất nhiên bạn cũng có thể viết tay để tạo ra những function như built-in function của python, nhưng tin mình đi, càng tìm hiểu python bạn sẽ thấy python càng uyển chuyển và đa tính năng như thế nào. Nếu bạn biết cách áp dụng những built-in function này, những dự án của bạn sẽ gọn và chạy nhanh hơn.

  1. Chúng ta nghiên cứu sâu hơn về range() một chút. Đầu tiên thì range() không phải là tuple, kết quả mà range() trả về là 1 biến lặp (iterator), không phải là list hay tuple, chúng ta sẽ biết về biến lặp trong các bài sau. monday, tuesday, wednesday, thursday, friday, saturday, sunday là các biến chúng ta đã khai báo.
  2. Lần lượt các giá trị từ range() sẽ được gán vào các biến bạn đã định nghĩa. Khi bạn gọi monday bạn sẽ thấy python trả về là 0.

Bài kế tiếp chúng ta sẽ học về số nguyên và số thực trong python. Mình sẽ giữ nguyên từ tiếng anh là int và float để các bạn có thể đọc các tài liệu nước ngoài nếu cần thiết

Các thẻ
Bài viết liên quan
Giới thiệu về Set

Ngày 14 Tháng 4, 2018

Giới thiệu về list

Ngày 09 Tháng 4, 2018

Giới thiệu về dictionary

Ngày 07 Tháng 4, 2018

0 nhận xét

    Không có nhận xét nào

Nhận xét mới

bắt buộc

yu.kusanagi
Từ Anh Vũ
Hồ Chí Minh, Việt Nam

Xin chào, tôi tên Từ Anh Vũ và là 1 free lancer developer và ngôn ngữ code yêu thích của tôi là Python và PHP. Công việc chủ yếu là viết các module cho magento, magento2, wordpress, django, flask và các framework khác
Nếu bạn muốn trao đổi với tôi hoặc muốn thuê tôi làm việc cho dự án của bạn, hãy liên hệ với tôi

ĐĂNG KÝ NHẬN BÀI MỚI

Tweets gần đây
Tác giả
Feeds
RSS / Atom
ADVERTISING

Đăng ký nhận bài viết mới tại hocpython.com?

Hãy đăng ký nhận bài viết mới tại hocpython.com để:

  • Không bỏ lỡ các bài tutorials mới tại hocpython.com!
  • Cập nhật các công nghệ mới trong python!

Chỉ cần điền email và họ tên của bạn và nhấn Đăng ký nhận tin!