Hướng dẫn python unpack tuple of unknown length - python giải nén bộ dữ liệu có độ dài không xác định

Tôi có chức năng nhỏ tiện dụng này:

def just(n, seq):
    it = iter(seq)
    for _ in range(n - 1):
        yield next(it, None)
    yield tuple(it)

Ví dụ:

a, b, c = just(3, range(5))
print a, b, c
## 0 1 (2, 3, 4)

Cũng hoạt động với ít đối số hơn:

a, b, c = just(3, ['X', 'Y'])
print a, b, c
## X Y ()

Đáp lại nhận xét, bạn cũng có thể xác định:

def take2(a, *rest): return a, rest
def take3(a, b, *rest): return a, b, rest
def take4(a, b, c, *rest): return a, b, rest
... etc

và sử dụng nó như thế này:

p = (1,2,3)
a, b = take2(*p)
print a, b
## 1 (2, 3)

Nếu bạn biết có bao nhiêu mục mà chuỗi (danh sách, tuple, set,) có chứa, bạn có thể xem bài viết khác của tôi về việc giải nén các chuỗi có thể đếm được.list, tuple, set…) contains, you can check out my other article on unpacking countable sequences.

Vấn đề

Bạn muốn giải nén một chuỗi (danh sách, tuple, đặt ra) thành các biến riêng biệt nhưng bạn không biết độ dài của chuỗi. Bây giờ nếu bạn thử giải nén trình tự thành các biến, nó dài hơn số lượng biến, Python đã ném một lỗi quá nhiều giá trị để giải nén.list, tuple, set…) into separate variables but you don’t know the length of the sequence. Now if you try unpacking the sequence into variables it is longer than the number of variables, python throws an error “too many values to unpack”.

Dung dịch

Python Hồi Star Biểu thức của ngôi sao *Can được sử dụng để giải quyết vấn đề này. Hãy tưởng tượng bạn có một hồ sơ chứa, một tên, tuổi và một hoặc nhiều địa chỉ email. Vì bạn không biết có bao nhiêu email mà bản ghi có thể có, bạn có thể sử dụng các biểu thức Python Star như thế này:

Lưu ý nhanh: Bất cứ nơi nào bạn thấy ..., nó có nghĩa là danh sách tiếp tục.: anywhere you see ... , it means the list goes on.

In [1]: record = ['John Doe', 50, '', ''...]In [2]: name, age, *emails = recordIn [3]: print(name)
John Doe
In [4]: print(age)
50
In [5]: print(emails)
['', ''...]

Xem xét một ví dụ khác. Bạn có một danh sách các tên và bạn không biết có bao nhiêu tên có thể nằm trong danh sách, nhưng bạn chỉ quan tâm đến hai tên đầu tiên và hai tên cuối cùng, Python Star Expressions lại đến giải cứu!

 In [1] names = ['William', 'Jamie', 'Susan', 'Allison', ... 'Michael', 'David', 'Christian']In [2]: first, second, *others, third, fourth = namesIn [3]: print(first, second, third, fourth)
William Jamie David Christian
In [4]: print(others)
Susan, Allison..., Michael

Điều quan trọng cần lưu ý là biến được sao chép, ví dụ:

a, b, c = just(3, range(5))
print a, b, c
## 0 1 (2, 3, 4)
0 sẽ luôn là một danh sách ngay cả khi không có mục nào được giải nén khỏi chuỗi. Để minh họa:

# you have a list of numbers which could contain four of more numbers
# but you want only the first four
In [1]: list_a = [221, 445, 35, 62, 532...]# list_a contains more than four numbersIn [2]: first, second, third, fourth, *others = list_aIn [3]: print(others)
[532...]
# others contains the items that were extra in list_a
# note that others is a list
In [4]: list_b = [221, 445, 35, 62]# list_b contains only four numbersIn [5]: first, second, third, fourth, *others = list_bIn [3]: print(others)
[]
# since no extra number is in list_b, others is empty
# note that others is still a list

Mở rộng không thể giải nén được

Trong bài viết trước của tôi, tôi đã giải thích cách giải nén chuỗi phần tử n trong để tách n biến bằng Python. (tức là bạn được yêu cầu biết chính xác có bao nhiêu phần tử theo thứ tự để giải nén)

Hôm nay, tôi sẽ giải thích phải làm gì khi bạn không biết có bao nhiêu biến để giải nén hoặc bạn chỉ muốn giải nén một số yếu tố khỏi một chuỗi.

Điều này được thực hiện khi đặt toán tử * trước tên biến bắt buộc. Điều xảy ra ở đây là biến với toán tử * lấy tất cả các phần tử còn lại sau khi các biến khác được gán với các phần tử tương ứng của chúng.

Đủ Chit-Chat. Hãy để đi sâu vào một số ví dụ.

Giả sử có một tuple có chứa hồ sơ sinh viên Tom. Nó có tên Tom, email và điểm số của anh ấy.

Tuple này có thể được giải nén như dưới đây.

Như bạn có thể thấy tất cả các lớp được giải nén vào biến ‘lớp, vì chúng tôi đã sử dụng‘**.

Đây là một ví dụ khác:

Danh sách chứa các GPA hiện tại và trước đó được giải nén thành hai biến.

Có những lúc bạn cảm thấy như bạn không muốn tất cả các yếu tố này và chỉ cần một số trong số chúng. Vào những thời điểm này, điều dễ dàng nhất và phổ biến nhất là sử dụng một biến số vứt đi với toán tử *. Biến số vứt bỏ phổ biến nhất là ‘_. (Xin lưu ý rằng bạn có thể sử dụng bất kỳ tên biến nào cho mục đích này)

Chỉ các yếu tố cần thiết được giải nén

Sử dụng * Cú pháp đặc biệt hữu ích nếu bạn có danh sách các bộ dữ liệu với nhiều độ dài khác nhau và muốn giải nén nó.

Ở đây danh sách L có hai bộ dữ liệu có chiều dài 3 và 2 tương ứng. Bằng cách sử dụng * cả hai bộ dữ liệu đã được giải nén.

Bonus!!!

Phương pháp này có thể được kết hợp với các toán tử chuỗi như chia, theo thứ tự để tách và giải nén một chuỗi đồng thời.

Tách và giải nén chuỗi đồng thời.

Bạn có thể giải nén một tuple trong Python không?

Trong các bộ dữ liệu python có thể được giải nén bằng cách sử dụng một hàm trong bộ hàm chức năng được truyền và trong các giá trị chức năng được giải nén vào biến bình thường.tuples can be unpacked using a function in function tuple is passed and in function values are unpacked into normal variable.

Có thể giải nén có thể trong một tuple?

Trong các bộ dữ liệu python có thể được giải nén bằng cách sử dụng một hàm trong bộ tple được truyền và trong hàm, các giá trị được giải nén thành một biến bình thường.Mã sau đây giải thích cách xử lý một số lượng đối số tùy ý.Càng*_ _ được sử dụng để chỉ định số lượng đối số tùy ý trong tuple.

Làm thế nào để bạn chia một giá trị tuple trong Python?

Để phân chia một tuple, chỉ cần liệt kê các tên biến được phân tách bằng dấu phẩy ở phía bên trái của một dấu hiệu bằng, và sau đó là một tuple ở phía bên phải.list the variable names separated by commas on the left-hand side of an equals sign, and then a tuple on the right-hand side.

Làm thế nào để tôi giải nén một tuple trong một vòng lặp?

Giải nén một tuple trong một vòng lặp trong python số lượng biến ở phía bên trái hoặc trước khi dấu bằng phải bằng chiều dài của tuple hoặc danh sách.Ví dụ: nếu một tuple có 5 phần tử, thì mã để giải nén nó sẽ như sau.Chúng ta có thể sử dụng cùng một cú pháp để giải nén các giá trị trong vòng lặp cho vòng lặp.The number of variables on the left side or before the equals sign should equal the length of the tuple or the list. For example, if a tuple has 5 elements, then the code to unpack it would be as follows. We can use the same syntax to unpack values within a for loop.