Hướng dẫn python 2 unpack tuple - python 2 giải nén tuple

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

Nội dung chính ShowShow

  • Vấn đề
  • Dung dịch
  • Bạn có thể giải nén một tuple trong Python không?
  • Có thể giải nén có thể trong một tuple?
  • Làm thế nào để bạn chia một giá trị tuple trong Python?
  • Làm thế nào để tôi giải nén một tuple trong một vòng lặp?

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.list, tuple, set…) contains, you can check out my other article on unpacking countable sequences.

Vấn đề

Dung dịchlist, 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

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

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

a, b, c = just(3, range(5))
print a, b, c
## 0 1 (2, 3, 4)
0 , 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)
['', ''...]

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

 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

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

Ví dụ:

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

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

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

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.

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”.

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

a, b, c = just(3, range(5))
print a, b, c
## 0 1 (2, 3, 4)
0, nó có nghĩa là danh sách tiếp tục.: anywhere you see
a, b, c = just(3, range(5))
print a, b, c
## 0 1 (2, 3, 4)
0 , it means the list goes on.

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!

Đ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.

Bonus!!!

Đủ 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.

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

Có thể giải nén có thể trong một tuple?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?

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

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

Làm thế nào để tôi giải nén một tuple trong một vòng lặp?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.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.