Python giải nén danh sách thành tuple

Trong Python, việc giải nén không chỉ giới hạn ở các bộ dữ liệu. Bạn có thể giải nén một danh sách hoặc một chuỗi với cú pháp tương tự

Giải nén thường được gọi là gán nhiều biến, vì nó gợi nhớ đến việc gán nhiều biến trên cùng một dòng

Trong hướng dẫn này, bạn tìm hiểu về bộ dữ liệu Python, giải nén bộ dữ liệu và cách sử dụng tính năng giải nén bộ dữ liệu với các loại khác

Tuple trong Python là gì

Trong Python, tuple là một trong những kiểu dựng sẵn cơ bản. Tương tự như một danh sách, một bộ có thể lưu trữ các phần tử thuộc các loại khác nhau

Sự khác biệt chính giữa bộ dữ liệu và danh sách trong Python là bộ dữ liệu là bất biến, trong khi danh sách có thể thay đổi. Điều này có nghĩa là bạn không thể thay đổi bộ theo bất kỳ cách nào sau khi nó đã được tạo

Ví dụ, đây là một bộ ba số nguyên

nums = [1, 2, 3]

Cần lưu ý ngay từ đầu rằng một bộ không nhất thiết phải có dấu ngoặc đơn

Ví dụ: bạn có thể tạo bộ dữ liệu giống như trên với

nums = 1, 2, 3

Để tìm hiểu thêm về các bộ dữ liệu trong Python, vui lòng xem bài viết này

Giải nén Tuple trong Python

Giải nén bộ dữ liệu có nghĩa là tách các giá trị khỏi bộ dữ liệu thành các biến riêng biệt

Trước khi đi vào chi tiết về tuple

giải nén, trước tiên chúng ta hãy xem xét việc truy cập các giá trị bộ dữ liệu

Cách truy cập các giá trị Tuple trong Python

Trong Python, bạn có thể truy cập các bộ dữ liệu với cú pháp tương tự như cách bạn truy cập một phần tử từ danh sách

  1. Chỉ định chỉ mục của phần tử bạn muốn truy cập
  2. Sử dụng toán tử truy cập dấu ngoặc vuông [] với chỉ mục để lấy phần tử cụ thể

Đây là cú pháp để truy cập các phần tử từ một tuple

tuple_values[index]

Ví dụ: hãy lấy tọa độ đầu tiên của bộ đại diện cho một điểm 3D

coords = 1, 2, 3

x = coords[0]

print[x]

đầu ra

1

Giải nén Tuple

Nếu bạn cần chọn tất cả các giá trị từ một bộ thành các biến, hãy sử dụng bộ

giải nén

Để thực hiện việc này, hãy khai báo một nhóm tên biến được phân tách bằng dấu phẩy và gán nó cho bộ dữ liệu. Để thực hiện công việc này, số lượng biến phải khớp với số lượng mục trong bộ dữ liệu

Ví dụ: hãy chọn tất cả các giá trị tọa độ 3D từ một bộ thành các biến x, y và z riêng biệt

coords = 1, 2, 3
x, y, z = coords

Cái này gán giá trị 1 cho x, 2 cho y và 3 cho z

Số biến phải bằng số phần tử

Đảm bảo rằng bạn luôn có cùng số phần tử ở mỗi bên của toán tử gán khi giải nén một bộ

Hãy xem điều gì xảy ra khi số biến vượt quá số phần tử trong bộ

coords = 1, 2, 3

x, y, z, i, j, k = coords 

đầu ra

ValueError: not enough values to unpack [expected 6, got 3]

Như bạn có thể thấy, việc giải nén không thành công vì không có đủ giá trị trong bộ dữ liệu để gán cho 6 biến

Ngoài ra, nếu số lượng biến mới ít hơn số phần tử trong bộ, việc giải nén không thành công

Ví dụ: hãy thử chọn hai giá trị từ bộ năm

________số 8_______

đầu ra

nums = [1, 2, 3]
0

Ở đây báo lỗi có quá nhiều giá trị để giải nén. Trong bộ có tổng cộng 5 giá trị, trong khi ta chỉ khai báo 2 biến để lưu trữ tất cả

Giải nén bất kỳ số lượng phần tử nào với toán tử *

Trong phần trước, bạn đã biết vế trái và vế phải của biểu thức giải nén bộ phải có số phần tử bằng nhau

Tuy nhiên, bạn có thể sử dụng ký tự đại diện * để bắt số phần tử tùy ý từ một bộ. Đây là cách duy nhất bạn không cần phải có số lượng mục bằng nhau ở cả hai phía của biểu thức

Ví dụ: giả sử bạn có một bộ gồm 3 giá trị tọa độ và 3 giá trị bổ sung đại diện cho một thứ khác

Hãy giải nén ba giá trị tọa độ đầu tiên thành các biến x, y và z riêng biệt, sau đó lưu các giá trị còn lại vào một danh sách

nums = [1, 2, 3]
1

Ở đây 1 được gán cho x, 2 cho y, 3 cho z và các giá trị còn lại được gán cho phần còn lại

Bạn có thể xác minh điều này bằng cách in các giá trị

nums = [1, 2, 3]
2

đầu ra

nums = [1, 2, 3]
3

Nếu bạn đang tự hỏi toán tử dấu hoa thị * làm gì, vui lòng xem qua

Nói tóm lại, đó là một ký hiệu đại diện cho bất kỳ số lượng đối số nào. Khi bạn sử dụng ký hiệu này trong một hàm trong Python, bạn có thể chuyển hàm đó cho bất kỳ số lượng đối số nào. Khi bạn sử dụng nó với tuple

giải nén, bạn có thể nắm bắt bất kỳ số lượng giá trị "còn sót lại" nào

Lưu ý rằng bạn không nhất thiết phải nắm bắt phần còn lại của các giá trị. Bạn cũng có thể nắm bắt được n giá trị ở giữa

Ví dụ: hãy lấy các tên xuất hiện ở giữa một bộ

nums = [1, 2, 3]
4

đầu ra

nums = [1, 2, 3]
5

Ở đây, toán tử * giải nén bất kỳ mục nào giữa hai phần tử đầu tiên và hai phần tử cuối cùng trong bộ dữ liệu. Trong trường hợp này, có hai chuỗi. Nhưng có thể có bất kỳ số nào trong số đó

Giải nén các Iterables khác trong Python

Trong Python, giải nén bộ dữ liệu cũng hoạt động đối với các loại có thể lặp lại khác. Mặc dù chúng tôi gọi nó là giải nén bộ dữ liệu, nhưng nó nên được gọi chính xác hơn là giải nén lặp lại

Ví dụ: bạn có thể sử dụng cú pháp giải nén để chọn giá trị từ danh sách hoặc từ điển

Hãy xem một số ví dụ cơ bản về giải nén với các loại lặp phổ biến khác trong Python

nums = [1, 2, 3]
6

Khi sử dụng Tuple Unpacking trong Python

Cho đến giờ, bạn đã học được rằng bạn có thể sử dụng tính năng giải nén để tách các giá trị khỏi một lần lặp trong Python

Nhưng khi nào bạn sẽ thực sự sử dụng một tính năng như vậy?

Về cơ bản, bạn có thể sử dụng giải nén bộ dữ liệu để rút ngắn mã của mình và làm cho mã dễ đọc hơn. Trong các phần sau, bạn sẽ tìm hiểu 5 trường hợp sử dụng phổ biến để giải nén trong Python

Khai báo nhiều giá trị trên cùng một dòng

Ứng dụng rõ ràng nhất của giải nén bộ dữ liệu là khả năng xác định nhiều biến trên cùng một dòng

Ví dụ, thay vì làm điều này

nums = [1, 2, 3]
7

Bạn có thể làm

nums = [1, 2, 3]
8

Biểu thức này làm cho mã ngắn hơn trong khi vẫn duy trì khả năng đọc

Đối với vòng lặp

Trong vòng lặp for, bạn thường sử dụng cú pháp giải nén khi lặp qua từ điển. Có lẽ đây là điều bạn đã làm mà không nhận ra nó cũng đang giải nén bộ dữ liệu

Ví dụ: hãy lặp qua một từ điển dữ liệu

nums = [1, 2, 3]
9

đầu ra

nums = 1, 2, 3
0

Sự khác biệt duy nhất khi làm điều này là bạn không sử dụng toán tử gán =. Thay vào đó, bạn sử dụng toán tử in

tuple_values[index]
8. Tuy nhiên, trong ngữ cảnh này, nó thực hiện chính xác như toán tử gán. Nó gán từng cặp khóa, giá trị trong từ điển dữ liệu cho từng biến khóa và giá trị một lần

Lưu ý rằng vòng lặp for này cũng có thể được viết theo cách này

nums = 1, 2, 3
1

Ở đây, vòng lặp coi các cặp khóa-giá trị là một đối tượng. Bên trong vòng lặp, sau đó bạn giải nén thông tin khóa và giá trị từ nó

Tránh các chỉ mục được mã hóa cứng

Đôi khi mã của bạn có thể bị lấp đầy bởi cái gọi là chỉ mục được mã hóa cứng, chẳng hạn như mục[-1] hoặc dữ liệu[1]

Trong khi đó, ý nghĩa của những điều này có thể rõ ràng đối với bạn, ai đó đang đọc mã của bạn có thể cần dành thời gian để hiểu ý định của bạn

Dưới đây là một ví dụ về cách các chỉ mục được mã hóa cứng có thể trông như thế nào

nums = 1, 2, 3
2

Thông thường, bạn có thể thực hiện công việc tốt hơn bằng cách giải nén thay vì các chỉ mục được mã hóa cứng

Để chứng minh, hãy biểu diễn một chuỗi ngày [YYYY-MM-DD] ở định dạng khác [MM/DD/YYYY]

nums = 1, 2, 3
3

đầu ra

nums = 1, 2, 3
4

Mã này khó đọc do các thành phần chỉ mục được mã hóa cứng[n]

Để giải quyết vấn đề, hãy giải nén năm, tháng và ngày thành các biến riêng biệt

nums = 1, 2, 3
5

đầu ra

nums = 1, 2, 3
4

Điều này cải thiện đáng kể khả năng đọc của đoạn mã đó, phải không?

Lát thay thế

Tương tự như cách bạn có thể viết các chỉ mục được mã hóa cứng trong mã Python của mình, bạn có thể giới thiệu mã cứng. Đây thường là cách làm không tốt vì nó cũng làm cho mã khó đọc hơn

Ví dụ

nums = 1, 2, 3
7

đầu ra

nums = 1, 2, 3
8

Thay vì chỉ định một lát cắt được mã hóa cứng như finish_order[. 3], bạn sử dụng giải nén

nums = 1, 2, 3
9

đầu ra

nums = 1, 2, 3
8

Bằng cách này, bạn thậm chí không cần sử dụng công cụ cắt lát để hoàn thành công việc

Đối với ai đó đọc mã của bạn, rõ ràng bạn muốn đạt được điều gì với những điều sau đây

tuple_values[index]
1

Trong khi đọc điều này, hãy mất một lúc để quấn lấy đầu bạn

tuple_values[index]
2

giải nén sâu

Bạn cũng có thể sử dụng tính năng giải nén để giải nén một đối tượng đã giải nén trong một lần. Đây là ý nghĩa của việc giải nén "sâu"

Ví dụ: hãy tạo một bộ có đối số thứ hai cũng là một bộ. Để truy cập bộ dữ liệu bên trong dưới dạng một bộ dữ liệu, hãy sử dụng cách giải nén mà bạn đã học hôm nay

tuple_values[index]
3

đầu ra

tuple_values[index]
4

Ở đây bạn đã giải nén hai đối tượng từ bộ dữ liệu thông tin

  • Tên của điểm
  • Điểm dưới dạng bộ dữ liệu 3D

Nhưng vì điểm 3D cũng là một bộ, nên bạn cũng có thể muốn giải nén nó. Để làm điều này, bạn có thể sử dụng giải nén sâu để giải nén một giá trị đã giải nén trong một lần

Ví dụ: hãy lấy các giá trị x, y và z từ bộ dữ liệu bên trong bộ dữ liệu

tuple_values[index]
5

đầu ra

tuple_values[index]
6

Hãy ghi nhớ khi làm điều này bạn cần dấu ngoặc đơn. Mặt khác, chương trình cho rằng bạn đang cố chọn 4 giá trị từ một bộ có hai đối tượng

Bạn có thể biến một danh sách thành một Tuple không?

Typecasting để tuple có thể được thực hiện đơn giản bằng cách sử dụng tuple[list_name]

Chúng ta có thể giải nén danh sách bằng Python không?

Chúng ta có thể sử dụng * để giải nén danh sách để tất cả các thành phần của danh sách có thể được chuyển dưới dạng các tham số khác nhau.

Có thể giải nén trong một tuple không?

Đóng gói và giải nén một Tuple. Trong Python, có một tính năng gán bộ rất mạnh giúp gán phía bên phải của các giá trị cho phía bên trái. Nói cách khác, nó được gọi là giải nén một bộ giá trị thành một biến .

Phương pháp nào có thể được sử dụng để chuyển đổi một danh sách thành một tuple?

Phương pháp 1. Sử dụng chức năng tích hợp sẵn tuple[] .

Chủ Đề