Thứ năm, 19/01/2017 | 00:00 GMT+7

Hiểu Tuples trong Python 3

Tuple là một cấu trúc dữ liệu là một chuỗi các phần tử có thứ tự bất biến hoặc không thể thay đổi. Bởi vì các bộ giá trị là bất biến, giá trị của chúng không thể sửa đổi. Nó được định dạng như dưới đây.

coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') 

Tuples được sử dụng để group dữ liệu. Mỗi phần tử hoặc giá trị nằm bên trong một bộ giá trị được gọi là một mục.

Tuples có giá trị giữa dấu ngoặc đơn ( ) cách nhau bởi dấu phẩy , . Các bộ giá trị trống sẽ xuất hiện dưới dạng coral = () , nhưng các bộ giá trị có chẵn một giá trị phải sử dụng dấu phẩy như trong coral = ('blue coral',) .

Nếu ta print() bộ tuple ở trên, ta sẽ nhận được kết quả sau, với bộ nguyên liệu vẫn được nhập bằng dấu ngoặc đơn:

print(coral) 
Output
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')

Khi nghĩ về bộ dữ liệu Python và các cấu trúc dữ liệu khác là loại bộ sưu tập, sẽ hữu ích khi xem xét tất cả các bộ sưu tập khác nhau mà bạn có trên máy tính của bạn : loại file , danh sách phát bài hát của bạn, dấu trang trình duyệt, email của bạn, bộ sưu tập video bạn có thể truy cập trên một dịch vụ phát trực tuyến và hơn thế nữa.

Tuples tương tự như danh sách , nhưng không thể sửa đổi giá trị của chúng. Do đó, khi bạn sử dụng các bộ giá trị trong mã của bạn , bạn đang truyền đạt cho những người khác rằng bạn không có ý định thay đổi chuỗi giá trị đó. Ngoài ra, vì các giá trị không thay đổi, mã của bạn có thể được tối ưu hóa thông qua việc sử dụng các bộ giá trị trong Python, vì mã sẽ nhanh hơn một chút cho các bộ giá trị so với danh sách.

Lập index Tuples

Là một chuỗi các phần tử có thứ tự, mỗi mục trong một bộ có thể được gọi riêng lẻ, thông qua việc lập index .

Mỗi mục tương ứng với một số index , là một giá trị nguyên, bắt đầu bằng số index 0 .

Đối với bộ coral , phân tích index trông như thế này:

'san hô xanh' 'san hô hươu sao' 'cột san hô' 'san hô elkhorn'
0 1 2 3

Mục đầu tiên, chuỗi 'blue coral' bắt đầu ở index 0 và danh sách kết thúc ở index 4 với mục 'elkhorn coral' .

Vì mỗi mục trong một tuple Python có một số index tương ứng, ta có thể truy cập các mục.

Bây giờ ta có thể gọi một mục rời rạc của bộ tuple bằng cách tham chiếu đến số index của nó:

print(coral[2]) 
Output
pillar coral

Các số index cho bộ này nằm trong repository ảng từ 0 - 3 , như trong bảng trên. Vì vậy, để gọi bất kỳ mục riêng lẻ nào, ta sẽ tham chiếu đến các số index như sau:

coral[0] = 'blue coral' coral[1] = 'staghorn coral'  coral[2] = 'pillar coral'  coral[3] = 'elkhorn coral' 

Nếu ta gọi coral tuple với số index của bất kỳ lớn hơn 3 , nó sẽ nằm ngoài phạm vi vì nó sẽ không hợp lệ:

print(coral[22]) 
Output
IndexError: tuple index out of range

Ngoài số index dương, ta cũng có thể truy cập các mục từ bộ với số chỉ số âm, bằng cách đếm ngược từ cuối bộ, bắt đầu từ -1 . Điều này đặc biệt hữu ích nếu ta có một bộ giá trị dài và ta muốn xác định một mục ở cuối bộ giá trị.

Đối với cùng một tuple coral , phân tích chỉ số âm trông giống như sau:

'san hô xanh' 'san hô hươu sao' 'cột san hô' 'san hô elkhorn'
-4 -3 -2 -1

Vì vậy, nếu ta muốn in ra mục 'blue coral' bằng cách sử dụng số index âm của nó, ta có thể làm như sau:

print(coral[-4]) 
Output
blue coral

Ta có thể nối các mục chuỗi trong một bộ với các chuỗi khác bằng cách sử dụng toán tử + :

print('This reef is made up of ' + coral[1]) 
Output
This reef is made up of staghorn coral

Ta có thể nối mục chuỗi ở số index 0 với chuỗi 'This reef is made up of ' . Ta cũng có thể sử dụng toán tử + để nối 2 hoặc nhiều bộ giá trị với nhau .

Với các số index tương ứng với các mục trong một bộ, ta có thể truy cập từng mục của một bộ một cách riêng biệt.

Slicing Tuples

Ta có thể sử dụng lập index để gọi ra một vài mục từ bộ tuple. Slices cho phép ta gọi nhiều giá trị bằng cách tạo một dải số index được phân tách bằng dấu hai chấm [x:y] .

Giả sử ta chỉ muốn in các mục ở giữa của coral , ta có thể thực hiện bằng cách tạo một lát cắt.

print(coral[1:3]) 
Output
('staghorn coral', 'pillar coral')

Khi tạo một lát cắt, như trong [1:3] , số index đầu tiên là nơi lát bắt đầu (bao gồm) và số index thứ hai là nơi lát kết thúc (loại trừ), đó là lý do tại sao trong ví dụ của ta ở trên, các mục tại vị trí, 12 là các mục in ra.

Nếu ta muốn bao gồm một trong hai phần cuối của danh sách, ta có thể bỏ qua một trong các số trong cú pháp tuple[x:y] . Ví dụ: nếu ta muốn in 3 mục đầu tiên của coral tuple - sẽ là 'blue coral' , 'staghorn coral' , 'pillar coral' - ta có thể thực hiện bằng cách nhập:

print(coral[:3]) 
Output
('blue coral', 'staghorn coral', 'pillar coral')

Điều này đã in phần đầu của bộ tuple, dừng ngay trước index 3 .

Để bao gồm tất cả các mục ở cuối một bộ, ta sẽ đảo ngược cú pháp:

print(coral[1:]) 
Output
('staghorn coral', 'pillar coral', 'elkhorn coral')

Ta cũng có thể sử dụng số index âm khi cắt các bộ giá trị, giống như với số index dương:

print(coral[-3:-1]) print(coral[-2:]) 
Output
('staghorn coral', 'pillar coral') ('pillar coral', 'elkhorn coral')

Một tham số cuối cùng mà ta có thể sử dụng với quá trình cắt được gọi là bước sóng , đề cập đến số lượng mục cần di chuyển về phía trước sau khi mục đầu tiên được truy xuất từ bộ tuple.

Lúc này, ta đã bỏ qua tham số bước và Python mặc định là bước bằng 1, để mọi mục giữa hai số index đều được truy xuất.

Cú pháp của cấu trúc này là tuple[x:y:z] , với z là sải chân. Hãy tạo một danh sách lớn hơn, sau đó chia nhỏ nó và cung cấp giá trị cho bước đi là 2:

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)  print(numbers[1:11:2]) 
Output
(1, 3, 5, 7, 9)

Các numbers[1:11:2] xây dựng của ta numbers[1:11:2] in ra các giá trị giữa các số index bao gồm 1 và không bao gồm 11 , sau đó giá trị bước của 2 yêu cầu chương trình chỉ in ra mọi mục khác.

Ta có thể bỏ qua hai tham số đầu tiên và chỉ sử dụng stride làm tham số với cú pháp tuple[::z] :

print(numbers[::3]) 
Output
(0, 3, 6, 9, 12)

Bằng cách in ra các numbers tuple với sải chân được đặt thành 3 , chỉ mỗi mục thứ ba được in:

0 , 1, 2, 3 , 4, 5, 6 , 7, 8, 9 , 10, 11, 12

Việc cắt các bộ giá trị với cả số chỉ số dương và âm và cho biết bước tiến cung cấp cho ta quyền kiểm soát để nhận được kết quả mà ta đang cố gắng đạt được.

Ghép và Nhân các Tuples

Các toán tử được dùng để nối hoặc nhân các bộ giá trị. Phép ghép được thực hiện với toán tử + và phép nhân được thực hiện với toán tử * .

Toán tử + được dùng để nối hai hoặc nhiều bộ giá trị với nhau. Ta có thể gán giá trị của hai bộ giá trị hiện có cho một bộ giá trị mới:

coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')  coral_kelp = (coral + kelp)  print(coral_kelp) 
Output
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')

Vì toán tử + có thể nối, nó được dùng để kết hợp các bộ giá trị để tạo thành một bộ mới, mặc dù nó không thể sửa đổi một bộ hiện có.

Toán tử * được dùng để nhân các bộ giá trị. Có lẽ bạn cần tạo bản sao của tất cả các file trong một folder lên server hoặc chia sẻ danh sách phát với bạn bè - trong những trường hợp này, bạn cần nhân các bộ sưu tập dữ liệu.

Hãy nhân tuple coral với 2 và tuple kelp với 3 và gán chúng cho các tuple mới:

multiplied_coral = coral * 2 multiplied_kelp = kelp * 3  print(multiplied_coral) print(multiplied_kelp) 
Output
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')

Bằng cách sử dụng toán tử * ta có thể sao chép các bộ giá trị của bạn theo số lần ta chỉ định, tạo các bộ giá trị mới dựa trên chuỗi dữ liệu ban đầu.

Các bộ giá trị hiện có có thể được nối hoặc nhân để tạo thành các bộ giá trị mới thông qua việc sử dụng các toán tử +* .

Hàm Tuple

Có một số chức năng tích hợp mà bạn có thể sử dụng để làm việc với các bộ giá trị. Hãy xem xét một vài trong số họ.

len ()

Giống như với chuỗi và danh sách, ta có thể tính toán độ dài của một tuple bằng cách sử dụng len() , trong đó ta truyền tuple dưới dạng tham số, như trong:

len(coral) 

Chức năng này hữu ích khi bạn cần thực thi độ dài thu thập tối thiểu hoặc tối đa, ví dụ, hoặc để so sánh dữ liệu theo trình tự.

Nếu ta in ra chiều dài cho numbersnumbers kelp ta , ta sẽ nhận được kết quả sau:

print(len(kelp)) print(len(numbers)) 
Output
4 13

Ta nhận được kết quả như trên vì kelp tuple có 4 mục:

kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis') 

Và bộ numbers có 13 mục:

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) 

Mặc dù các ví dụ này có tương đối ít mục, nhưng hàm len() cung cấp cho ta cơ hội để xem có bao nhiêu mục trong các bộ giá trị lớn.

max () và min ()

Khi ta làm việc với các bộ giá trị bao gồm các mục số, (bao gồm cả số nguyênsố float ), ta có thể sử dụng các hàm max()min() để tìm các giá trị cao nhất và thấp nhất có trong bộ giá trị tương ứng.

Các chức năng này cho phép ta tìm hiểu thông tin về dữ liệu định lượng, chẳng hạn như điểm kiểm tra, nhiệt độ, giá cả, v.v.

Hãy xem xét một tuple bao gồm các phao:

more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57) 

Để có được max() , ta sẽ truyền bộ giá trị vào hàm, như trong hàm max(more_numbers) . Ta sẽ kết hợp hàm này với hàm print() để ta có thể xuất ra kết quả của bạn :

print(max(more_numbers)) 
Output
95.59

Hàm max() trả về giá trị cao nhất trong bộ giá trị của ta .

Tương tự, ta có thể sử dụng hàm min() :

print(min(more_numbers)) 
Output
11.12

Ở đây, phao nhỏ nhất đã được tìm thấy trong bộ tuple và được in ra.

Cũng giống như với hàm len() , các hàm max()min() có thể rất hữu ích khi làm việc với các bộ giá trị chứa nhiều giá trị.

Tuples khác với danh sách như thế nào

Cách chính mà các bộ giá trị khác với danh sách là chúng không thể được sửa đổi. Điều này nghĩa là không thể thêm hoặc xóa các mục khỏi bộ giá trị và không thể thay thế các mục trong bộ giá trị.

Tuy nhiên, bạn có thể nối 2 hoặc nhiều bộ để tạo thành một bộ mới.

Hãy xem xét tuple coral của ta :

coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') 

Giả sử ta muốn thay thế mặt hàng 'blue coral' bằng một mặt hàng khác có tên 'black coral' . Nếu ta cố gắng thay đổi kết quả đó giống như cách ta làm với danh sách, bằng lệnh :

coral[0] = 'black coral' 

Ta sẽ nhận được một lỗi như kết quả của ta :

Output
TypeError: 'tuple' object does not support item assignment

Điều này là do không thể sửa đổi các bộ giá trị.

Nếu ta tạo một bộ tuple và quyết định thứ ta thực sự cần là một danh sách, ta có thể chuyển nó thành một danh sách. Để chuyển đổi một tuple thành một danh sách, ta có thể làm như vậy với list() :

list(coral) 

Và bây giờ, kiểu dữ liệu coral của ta sẽ là một danh sách:

coral = ['blue coral', 'staghorn coral', 'pillar coral'] 

Ta có thể thấy rằng tuple đã được chuyển đổi thành một danh sách vì các dấu ngoặc đơn đã thay đổi thành dấu ngoặc vuông.

Tương tự như vậy, ta có thể chuyển đổi danh sách thành bộ giá trị bằng tuple() .

Bạn có thể tìm hiểu thêm về chuyển đổi kiểu dữ liệu bằng cách đọc “ Cách chuyển đổi kiểu dữ liệu trong Python 3 ”.

Kết luận

Các kiểu dữ liệu tuple là một trình tự kiểu dữ liệu mà không thể được sửa đổi, cung cấp tối ưu hóa cho các chương trình của bạn bằng cách trở thành một loại hơi nhanh hơn so với danh sách cho Python để xử lý. Khi những người khác cộng tác với bạn trên mã của bạn, việc bạn sử dụng các bộ giá trị sẽ truyền tải cho họ rằng bạn không có ý định sửa đổi các chuỗi giá trị đó.

Hướng dẫn này bao gồm các tính năng cơ bản của các bộ giá trị, bao gồm lập index , cắt và nối các bộ giá trị và hiển thị các hàm tích hợp sẵn có.


Tags:

Các tin liên quan

Cách tạo các vòng lặp trong Python 3
2017-01-12
Hiểu toàn bộ danh sách trong Python 3
2017-01-12
Cách sử dụng các câu lệnh Break, Continue và Pass khi làm việc với các vòng lặp trong Python 3
2017-01-06
Cách tạo vòng lặp While trong Python 3
2017-01-05
Cách làm việc với dữ liệu ngôn ngữ trong Python 3 bằng Bộ công cụ ngôn ngữ tự nhiên (NLTK)
2017-01-03
Cách tạo Twitterbot bằng Python 3 và Thư viện Tweepy
2016-11-30
Cách tạo ứng dụng Twitter bằng Python
2016-11-23
Cách tạo ứng dụng Twitter bằng Python
2016-11-23
Hiểu Logic Boolean trong Python 3
2016-11-17
Cách tạo chương trình máy tính bằng Python 3
2016-11-16