Chào mừng đến với ngày thứ 9 của loạt bài 30 Days of Python. Hôm nay chúng ta sẽ xem xét một kỹ thuật lặp thực sự hữu ích được gọi là giải nén. Chúng ta cũng sẽ khám phá một số chức năng mới.
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7Nếu bạn bỏ lỡ bài đăng ngày hôm qua, chúng tôi đã đề cập đến một cấu trúc rất quan trọng được gọi là vòng lặp
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
8, vì vậy tôi khuyên bạn nên xem qua nếu đó là thứ bạn chưa quengiải nén
Giải nén thường được sử dụng để thực hiện một số nhiệm vụ cùng một lúc, bằng cách trích xuất các giá trị riêng lẻ từ một số lần lặp. Quá trình này còn được gọi là phá hủy
Hãy xem xét một trường hợp rất đơn giản. Có lẽ tôi có một bản ghi phim, đó là một bộ dữ liệu và chứa tên phim, tên đạo diễn và năm phát hành. Điều tôi muốn làm là gán các giá trị của bộ dữ liệu này cho ba biến.
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
9, movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
0 và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
1Với kiến thức hiện tại của chúng tôi, chúng tôi phải làm một cái gì đó như thế này
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title = movie[0]
director = movie[1]
year = movie[2]
Tuy nhiên, điều này hơi tẻ nhạt và may mắn thay, có một cách tốt hơn nhiều. Thay vì viết các bài tập riêng biệt và truy cập các chỉ mục, chúng ta chỉ cần viết cái này
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
Điều đang xảy ra ở đây là Python thấy rằng chúng ta có ba tên mà chúng ta muốn gán cho và bộ mà chúng ta đang gán cho nó có ba phần tử. Do đó, nó lấy một mục từ các bộ, mỗi lần một mục và gán các giá trị này cho các tên theo thứ tự
Số lượng tên phải khớp với số lượng phần tử trong iterable, nếu không chúng ta sẽ nhận được một ngoại lệ như thế này
________số 8
Chúng tôi không giới hạn chỉ các bộ dữ liệu ở đây. chúng ta có thể sử dụng danh sách hoặc bất kỳ loại có thể lặp lại nào khác. Điều này cực kỳ hữu ích và chúng ta có thể sử dụng kỹ thuật này theo vòng lặp để đạt được hiệu quả tuyệt vời, như chúng ta sắp thấy
Giải nén trong các vòng lặp
Hãy quay lại ví dụ thư viện phim của chúng tôi, nơi chúng tôi có một danh sách chứa một số bộ phim
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
Khi chúng tôi lần đầu tiên tìm kiếm các vòng lặp, chúng tôi đã có một ví dụ trong đó chúng tôi in các giá trị từ mỗi bộ dữ liệu này theo cách tốt đẹp cho người dùng để họ có thể xem tất cả các bộ phim của họ
Vòng lặp trông như thế này
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
Vòng lặp này hoạt động hoàn toàn tốt, nhưng có một điều không tuyệt vời là các giá trị thực sự không rõ ràng.
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
2 là gì? . Sẽ tốt hơn nhiều nếu chúng ta có thể sử dụng những cái tên đẹp, mang tính mô tả ở đây để thay thếHãy nghĩ xem điều gì sẽ xảy ra khi chúng ta lặp lại
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3. Đối với mỗi lần lặp lại, movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3 sẽ cung cấp cho chúng tôi một bộ dữ liệu duy nhất và chúng tôi sẽ gán giá trị này cho movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
5Nếu chúng ta nghĩ về nó, điều đó rất giống với việc làm này
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
5Chúng tôi có một tên,
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
5, và chúng tôi đang gán một bộ dữ liệu cho nó. Trong trường hợp này, chúng ta có bộ dữ liệu thứ hai từ danh sách movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3Tuy nhiên, chúng ta vừa thấy một ví dụ về một bộ như thế này được giải nén thành ba biến, như vậy
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
8Hóa ra, chúng ta có thể làm chính xác điều tương tự trong vòng lặp for của mình
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
9Đối với mỗi lần lặp lại của vòng lặp,
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3 cung cấp cho chúng tôi một bộ dữ liệu duy nhất. Python thấy rằng bộ dữ liệu có ba giá trị trong đó và chúng tôi đã xác định ba tên. Do đó, nó lấy phần tử đầu tiên trong bộ dữ liệu và gán nó với tên movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
9; Bằng cách sử dụng tính năng giải nén ở đây, chúng tôi đã làm cho cuộc gọi
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
52 của mình dễ đọc hơn rất nhiều, bởi vì thay vì đề cập đến các chỉ mục, chúng tôi có các tên mô tả rõ ràngNếu bạn muốn tìm hiểu thêm về kỹ thuật này, chúng tôi có một bài đăng trên blog đi sâu vào chi tiết hơn
liệt kê
Một ứng dụng phổ biến để giải nén là khi sử dụng hàm có tên là
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6Trước khi chúng tôi xem xét chính chức năng đó, tôi muốn thêm một phần chức năng vào vòng lặp in của chúng tôi. Cũng như thông tin về phim, tôi muốn bắt đầu mỗi dòng bằng một số, đại diện cho thứ tự của các bộ phim
Nói cách khác, tôi muốn đầu ra như thế này
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6Làm thế nào chúng ta sẽ đi về điều này?
Thông qua một số phương tiện, chúng ta sẽ cần tạo ra một số loại bộ đếm. Đây là một giải pháp rất phổ biến cho vấn đề này mà tôi thấy mọi lúc
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7Rất rõ ràng, trong khi loại giải pháp này là phổ biến, nó không phải là một giải pháp tốt. Điều này rõ ràng rất khó đọc và chúng tôi đã mất tất cả những cái tên tuyệt vời của mình
Để đầy đủ, hãy nói về cách thức hoạt động của nó, bởi vì tôi đảm bảo rằng bạn sẽ thấy các giải pháp như thế này vào một lúc nào đó
Đầu tiên, chúng ta gọi hàm này là
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
54 để tìm xem có bao nhiêu phim trong danh sách movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3. Trong trường hợp của chúng tôi, có ________ 156 phim, vì vậy ________ 157 sẽ đánh giá thành _________ 156Giá trị này,
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
56, sau đó được chuyển vào movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80. Như chúng ta đã thấy trong ngày thứ 6, nếu chúng ta chuyển một giá trị duy nhất cho movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80, nó sẽ cho chúng ta một chuỗi giá trị từ movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
82 cho đến [nhưng không bao gồm] số mà chúng ta đã chuyển vào. Do đó, movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80 của chúng tôi trông như thế nàymovie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
0movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80 là một iterable và giá trị đầu tiên mà nó sẽ cung cấp cho chúng ta là movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
82, giá trị mà chúng ta đang gán cho tên này là movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
86. Sau đó, chúng tôi sử dụng giá trị này để tra cứu một bộ phim trong movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3Hãy nhớ rằng
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
88 sẽ cho chúng ta bộ phim đầu tiên trong danh sách và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
89 cho chúng ta giá trị thứ hai, v.v.Khi chúng tôi xem qua các giá trị
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80, số lượng tăng lên và cuối cùng chúng tôi sẽ xem lần lượt từng phim. Đối với mỗi bộ phim, chúng tôi đang truy cập dữ liệu mà chúng tôi muốn bằng cách sử dụng một biểu thức đăng ký khác [cú pháp dấu ngoặc vuông], giống như chúng tôi đã làm trước đâymovies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
86 cũng đóng vai trò là quầy của chúng tôi. Đối với lần lặp đầu tiên, nó là movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
82, vì vậy chúng tôi chỉ cần thêm movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
93 vào nó để có số movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
93 được in bên cạnh những bộ phim đầu tiên của chúng tôi. Sau đó, nó tăng thêm 193 mỗi lần, cho chúng tôi một bộ đếm tăng dần khi bắt đầu đầu ra bản in của chúng tôiĐược rồi, vì vậy đây không phải là một giải pháp tuyệt vời, nhưng cách tốt hơn là gì?
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
1Chúng tôi chưa từng thấy cú pháp
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
96 này trước đây, nhưng movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
97 là cách viết tắt để viết cú pháp nàymovie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
2Đây là một giải pháp tốt hơn nhiều, nhưng hiện tại chúng tôi có cuốn sách này đang thay đổi và tôi không thực sự thích điều đó. Theo tôi, một giải pháp tốt hơn là sử dụng
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 là một hàm tích hợp tạo bộ đếm cùng với các giá trị trong một lần lặp. Những gì chúng tôi kết thúc là một loạt các bộ dữ liệu, trong đó phần tử đầu tiên trong mỗi bộ dữ liệu là bộ đếm và giá trị thứ hai là phần tử ban đầu từ bộ lặpTrước tiên hãy xem một ví dụ đơn giản. Tôi chỉ muốn tạo một bộ đếm cùng với danh sách tên. Chúng ta có thể làm điều này như vậy
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
3Cái mà
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 chứa trong trường hợp này là một loạt các bộ dữ liệu như thế nàymovie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
4Và đầu ra của chúng tôi trông như thế này
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
5Đây không phải là điều tôi muốn, vì tôi muốn các giá trị bắt đầu từ
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
93. Đây là một cách khắc phục dễ dàng, bởi vì chúng tôi có thể đặt giá trị bắt đầu cho bộ đếm khi chúng tôi gọi movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
6Bây giờ chúng tôi nhận được đầu ra mà chúng tôi muốn
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
7Hãy quay lại ví dụ ban đầu của chúng ta với các bộ phim. Mọi thứ ở đây không dễ dàng như vậy, bởi vì bản thân mỗi phần tử của chúng ta là một bộ. Chúng ta chỉ có thể làm điều này
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
8Đây là kết quả của
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 là như thế nàymovie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
9Vì vậy,
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
64 lấy giá trị của mỗi số ở vị trí đầu tiên [movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
93, movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
66 và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
56]. Và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
5 lấy giá trị của mỗi bộ ở vị trí thứ hai [chẳng hạn như movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
69]Tuy nhiên, tôi vẫn muốn có thể giải nén bộ phim này thành các tên biến mô tả mà chúng tôi đã có trước đây. Nhưng làm thế nào để chúng ta giải nén một cái gì đó như thế này
Traceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
0Tất cả những gì chúng ta phải làm là khớp với cấu trúc của thứ mà chúng ta muốn giải nén. Ở đây chúng ta có một bộ hai phần tử, trong đó phần tử thứ hai là một bộ ba phần tử. Vì vậy, chúng tôi có thể giải nén cấu trúc này ở trên như vậy
Traceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
1Trong vòng lặp của chúng tôi, chúng tôi chỉ cần làm điều tương tự
Traceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
2Lưu ý rằng các dấu ngoặc ở đây thực sự quan trọng. Nếu chúng ta viết điều này,
Traceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
3chúng tôi sẽ nhận được một
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
70, bởi vì chúng tôi đã cung cấp bốn tên, nhưng chỉ có hai giá trị. bộ đếm và bộ phim. Bằng cách sử dụng các dấu ngoặc đơn này, chúng tôi xác định rằng chúng tôi muốn giá trị thứ hai này [bộ] được chia thành ba tên riêng biệtHàm movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 là một chức năng cực kỳ mạnh mẽ và linh hoạt được sử dụng để kết hợp hai hoặc nhiều lần lặp thành một lần lặp duy nhấtVí dụ: giả sử chúng ta có hai danh sách như thế này
Traceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
4movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 sẽ cho phép chúng tôi biến điều này thành một lần lặp mới có chứa những điều sau đâyTraceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
5Về bản chất, nó lấy mục đầu tiên từ mỗi lần lặp và đặt chúng lại với nhau trong một bộ dữ liệu. Sau đó, nó lấy mục thứ hai từ mỗi lần lặp, v.v., cho đến khi một trong các lần lặp hết giá trị. Chúng ta sẽ quay lại vấn đề này sau, vì nó thực sự quan trọng
Để sử dụng
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7, tất cả những gì chúng ta phải làm là gọi hàm và chuyển vào các lần lặp mà chúng ta muốn nén lại với nhauTraceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
6Nếu chúng tôi muốn nén ba hoặc thậm chí nhiều lần lặp lại với nhau, chúng tôi có thể tiếp tục chuyển ngày càng nhiều mục hơn tới
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 khi chúng tôi gọi nóGiống như
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80, movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 lười biếng, có nghĩa là nó chỉ tính toán giá trị tiếp theo khi chúng tôi yêu cầu. Do đó, chúng tôi không thể in nó trực tiếp, nhưng chúng tôi có thể chuyển đổi nó thành một thứ gì đó giống như một danh sách nếu chúng tôi muốn xem đầu raTraceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
7Sử dụng movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 trong các vòng lặp
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
Một cách rất phổ biến khác để sử dụng
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 là lặp lại hai hoặc nhiều lần lặp lại cùng một lúc trong một vòng lặp forHãy quay lại ví dụ về chủ sở hữu thú cưng của chúng ta, nhưng bây giờ tôi muốn in một số đầu ra mô tả ai sở hữu thú cưng nào
Chúng ta có thể sử dụng
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 và một chút phá hủy để làm điều này một cách thực sự rõ ràng, bởi vì chúng ta có thể sử dụng các tên biến rõ ràng đẹp đẽ trong vòng lặpTraceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
8Cách thay thế phổ biến cho việc sử dụng
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 là mẫu movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
80 + movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
54 khó chịu mà chúng ta đã thấy trước đó với movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6. Tôi khuyên bạn nên tránh điều đó bằng mọi giáLưu ý khi sử dụng movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
Một điều bạn cần lưu ý khi nói đến
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 là chúng được tiêu thụ khi chúng ta lặp lại chúng. Điều này thường không phải là vấn đề khi chúng ta sử dụng chúng trực tiếp trong các vòng lặp, nhưng đôi khi nó có thể gây khó khăn cho các nhà phát triển mới hơn khi họ gán một đối tượng movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 hoặc movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 cho một biếnĐây là một ví dụ mà chúng ta gán kết quả của việc gọi
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 cho một biếnTraceback [most recent call last]:
File "main.py", line 3, in
title, director, year = movie
ValueError: not enough values to unpack [expected 3, got 2]
9Chúng tôi có thể lặp lại các bộ phim mà không gặp vấn đề gì
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
0Tuy nhiên, nếu bây giờ chúng tôi cố gắng sử dụng lại
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3, chúng tôi sẽ thấy rằng nó trống. Hãy thử chạy đoạn mã dưới đây để xem điều nàymovies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
1Nếu bạn cố gắng lặp lại
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3 sau vòng lặp ban đầu, bạn cũng sẽ thấy rằng nó không chứa giá trị nàoLý do điều này xảy ra là bởi vì
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7 và movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6 tạo ra một thứ gọi là iterator. Chúng ta sẽ không nói sâu về các trình vòng lặp trong loạt bài này, vì các trình vòng lặp là một chủ đề nâng cao, nhưng một tính năng chính của các trình vòng lặp là chúng được sử dụng khi chúng ta yêu cầu các giá trị của chúng. Đây thực sự là một tính năng thực sự hữu ích, nhưng nó cũng là một nguồn lỗi phổ biến nếu bạn không quen với hành vi nàyMột cách dễ dàng để vượt qua giới hạn này là chỉ cần chuyển đổi iterator thành một bộ sưu tập không iterator, chẳng hạn như danh sách hoặc bộ dữ liệu
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
2Bây giờ chúng ta có thể truy cập các giá trị trong
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
for movie in movies:
print[f"{movie[0]} [{movie[2]}], by {movie[1]}"]
3 bao nhiêu lần tùy thíchbài tập
1] Dưới đây là một số dữ liệu đơn giản về các nhân vật trong BoJack Horseman
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
3Dữ liệu chứa tên nhân vật, diễn viên lồng tiếng hoặc nữ diễn viên đóng vai họ và loài của nhân vật
Viết một vòng lặp for sử dụng hàm hủy để bạn có thể in từng bộ theo định dạng sau
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
4Lưu ý rằng bạn sẽ phải thay đổi thông tin loài thành chữ thường khi in. Nếu bạn cần lời nhắc về cách thực hiện việc này, chúng tôi đã đề cập đến nó vào ngày thứ 3 của tuần đầu tiên
2] Giải nén bộ dữ liệu sau thành 4 biến
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
5Dữ liệu đại diện cho tên của sinh viên, mã số sinh viên của họ và các ngành học chính và phụ của họ theo thứ tự đó
3] Điều tra điều gì sẽ xảy ra khi bạn cố nén hai lần lặp có độ dài khác nhau. Ví dụ: thử nén một danh sách chứa ba mục và một bộ chứa bốn mục
Bạn có thể tìm lời giải của chúng tôi cho các bài tập ở đây
Dự án
Khi bạn đã hoàn thành các bài tập, chúng tôi có một dự án khác cho bạn hôm nay. Lần này chúng tôi đang viết một chương trình ngắn để xác thực thẻ tín dụng
tài nguyên bổ sung
Nếu bạn muốn tìm hiểu thêm về cách giải nén, chúng tôi có một bài đăng trên blog đi sâu vào chi tiết hơn
Chúng tôi cũng có một bài đăng trên blog về
movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
6, bạn có thể tìm thấy ở đây và một bài đăng trên movies = [
[
"Eternal Sunshine of the Spotless Mind",
"Michel Gondry",
2004
],
[
"Memento",
"Christopher Nolan",
2000
],
[
"Requiem for a Dream",
"Darren Aronofsky",
2000
]
]
7, bạn có thể đọc ở đâyNgoài tất cả những điều này, chúng tôi có một bài viết nói về một chức năng khác gọi là
movie = ["12 Angry Men", "Sidney Lumet", 1957]
title, director, year = movie
19. Điều này cho phép chúng tôi nén các bộ sưu tập có kích thước khác nhau mà không làm mất dữ liệu, nhưng nó yêu cầu một số kỹ thuật mà chúng tôi chưa xem xét, chẳng hạn như nhập mã từ các tệp khác. Nếu bạn quan tâm, bạn có thể tìm thấy bài viết đó ở đây