Tôi cảm thấy như mình dành nhiều thời gian để viết mã bằng Python, nhưng không đủ thời gian để tạo mã Pythonic. Gần đây tôi gặp phải một vấn đề nhỏ vui nhộn mà tôi nghĩ có thể có một giải pháp dễ dàng, thành ngữ. Paraphrasing bản gốc, tôi cần thu thập mọi cặp tuần tự trong một danh sách. Ví dụ: với danh sách
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
6, tôi muốn tính toán
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
Tôi đã đưa ra một giải pháp nhanh chóng vào thời điểm đó trông giống như Java được dịch. Xem lại câu hỏi, điều tốt nhất tôi có thể làm là
l = [1,2,3,4,5,6]
[(l[2*x],l[2*x+1]) for x in range(len(l)/2)]
trong đó có tác dụng phụ của việc tung ra số cuối cùng trong trường hợp độ dài không phải.
Có một cách tiếp cận thành ngữ hơn mà tôi đang thiếu, hay đây là cách tốt nhất tôi sẽ nhận được?
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Lặp lại song song với chức năng Zip () của Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Parallel Iteration With Python's zip() Function
Chức năng Python từ
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 tạo ra một trình lặp sẽ tổng hợp các phần tử từ hai hoặc nhiều vòng lặp. Bạn có thể sử dụng trình lặp kết quả để giải quyết nhanh chóng và nhất quán các vấn đề lập trình phổ biến, như tạo từ điển. Trong hướng dẫn này, bạn sẽ khám phá ra logic đằng sau hàm Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 và cách bạn có thể sử dụng nó để giải quyết các vấn đề trong thế giới thực.
Đến cuối hướng dẫn này, bạn sẽ học:
Cách
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 hoạt động trong cả Python 3 và Python 2
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 works in both Python 3 and Python 2
Cách sử dụng hàm Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 để lặp song songparallel
iteration
Cách tạo từ điển khi đang bằng cách sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8create dictionaries on the fly using
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 là mục cuối cùng trong danh sách các đối tượng có sẵn.
Theo tài liệu chính thức, chức năng Python từ
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 hoạt động như sau:
Trả về một trình lặp của các bộ dữ liệu, trong đó bộ thứ ba chứa phần tử thứ i từ mỗi chuỗi đối số hoặc các vòng lặp. Trình lặp dừng khi có thể cạn kiệt đầu vào ngắn nhất. Với một đối số có thể lặp lại duy nhất, nó trả về một trình lặp gồm 1 bộ. Không có đối số, nó trả về một trình lặp trống. (Nguồn)
Bạn sẽ giải nén định nghĩa này trong suốt phần còn lại của hướng dẫn. Khi bạn làm việc thông qua các ví dụ mã, bạn sẽ thấy rằng các hoạt động của Python Zip hoạt động giống như dây kéo vật lý trên túi hoặc đôi quần jean. Các cặp răng xen kẽ ở cả hai mặt của dây kéo được kéo lại với nhau để đóng một lỗ mở. Trên thực tế, sự tương tự trực quan này là hoàn hảo để hiểu
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8, vì hàm được đặt tên theo khóa kéo vật lý!
Sử dụng >>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
8 trong Python
Hàm Python từ
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 được định nghĩa là
>>> zipped=zip()>>> zipped<zip object at 0x7f196294a488>>>> list(zipped)[]
3. Chức năng lấy Iterables làm đối số và trả về trình lặp. Iterator này tạo ra một loạt các bộ dữ liệu chứa các yếu tố từ mỗi phần có thể.
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 có thể chấp nhận bất kỳ loại khác nhau, chẳng hạn như tệp, danh sách, bộ dữ liệu, từ điển, bộ, v.v.iterator. This iterator generates a series of tuples containing elements from each iterable.
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 can accept any type of iterable, such as files,
lists, tuples, dictionaries, sets, and so on.
Vượt qua >>> zipped = zip()
>>> zipped
<zip object at 0x7f196294a488>
>>> list(zipped)
[]
5 đối số
Nếu bạn sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 với các đối số
>>> zipped=zip()>>> zipped<zip object at 0x7f196294a488>>>> list(zipped)[]
5, thì hàm sẽ trả về một trình lặp tạo ra các bộ dữ liệu có độ dài
>>> zipped=zip()>>> zipped<zip object at 0x7f196294a488>>>> list(zipped)[]
5. Để xem điều này trong hành động, hãy xem khối mã sau:
>>>
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
Ở đây, bạn sử dụng
>>> zipped=zip()>>> zipped<zip object at 0x7f196294a488>>>> list(zipped)[]
9 để tạo một trình lặp lại tạo ra các bộ dữ liệu của mẫu
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
0. Trong trường hợp này, các giá trị
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
1 được lấy từ
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
2 và các giá trị
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
3 được lấy từ
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
4. Lưu ý cách hàm Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 trả về một trình lặp. Để truy xuất đối tượng danh sách cuối cùng, bạn cần sử dụng
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
6 để tiêu thụ trình lặp.
Nếu bạn làm việc với các chuỗi như danh sách, bộ dữ liệu hoặc chuỗi, thì các phép lặp của bạn được đảm bảo sẽ được đánh giá từ trái sang phải. Điều này có nghĩa là danh sách kết quả của các bộ dữ liệu sẽ có dạng
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
7. Tuy nhiên, đối với các loại lặp khác (như bộ), bạn có thể thấy một số kết quả kỳ lạ:
Điều này có thể không hữu ích, nhưng nó vẫn hoạt động. Có lẽ bạn có thể tìm thấy một số trường hợp sử dụng cho hành vi này của
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8!
Như bạn có thể thấy, bạn có thể gọi chức năng Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 với nhiều lần lặp lại mà bạn cần. Độ dài của các bộ dữ liệu kết quả sẽ luôn bằng số lần lặp bạn vượt qua dưới dạng đối số. Ở đây, một ví dụ với ba lần lặp:
9, được giới thiệu thông qua PEP 618, ADD ADD kiểm tra độ dài theo chiều dài để zip. Mục tiêu chính của đối số này là cung cấp một cách an toàn để xử lý các vòng lặp có độ dài không đồng đều.safe way to handle iterables of unequal length.
07 Làm cho mã mong đợi các vòng lặp có độ dài bằng nhau an toàn hơn, đảm bảo rằng các thay đổi bị lỗi đối với mã người gọi don lồng dẫn đến việc âm thầm mất dữ liệu.
So sánh >>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
8 trong Python 3 và 2
Chức năng Python từ
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 hoạt động khác nhau trong cả hai phiên bản của ngôn ngữ. Trong Python 2,
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
Với thủ thuật này, bạn có thể sử dụng chức năng Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 một cách an toàn trong suốt mã của mình. Khi chạy, chương trình của bạn sẽ tự động chọn và sử dụng phiên bản chính xác.
Cho đến nay, bạn đã đề cập đến cách chức năng Python từ ____28 hoạt động và tìm hiểu về một số tính năng quan trọng nhất của nó. Bây giờ, thời gian để cuộn tay áo lên và bắt đầu mã hóa các ví dụ trong thế giới thực!
Vòng lặp qua nhiều vòng lặp
Vòng lặp qua nhiều lần lặp là một trong những trường hợp sử dụng phổ biến nhất cho chức năng Python từ ____28. Nếu bạn cần lặp lại thông qua nhiều danh sách, bộ dữ liệu hoặc bất kỳ chuỗi nào khác, thì nó có khả năng là bạn sẽ quay trở lại trên
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8. Phần này sẽ chỉ cho bạn cách sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 để lặp qua nhiều lần lặp cùng một lúc.
Danh sách đi ngang song song
Chức năng Python từ
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 cho phép bạn lặp lại song song hơn hai hoặc nhiều lần lặp. Vì
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 tạo ra các bộ dữ liệu, bạn có thể giải nén chúng trong tiêu đề của vòng lặp
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 với ba lần lặp để tạo và trả về một trình lặp tạo ra các bộ dữ liệu 3 mục. Điều này cho phép bạn lặp lại thông qua cả ba lần lặp trong một lần. Không có hạn chế nào về số lượng lặp mà bạn có thể sử dụng với chức năng Python từ ____28.
Đi ngang qua từ điển song song
Trong Python 3.6 và hơn thế nữa, từ điển được đặt hàng các bộ sưu tập, có nghĩa là chúng giữ các yếu tố của chúng theo cùng một thứ tự mà chúng được giới thiệu. Nếu bạn tận dụng tính năng này, thì bạn có thể sử dụng chức năng Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 để lặp qua nhiều từ điển theo cách an toàn và mạch lạc:
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 tạo ra các bộ dữ liệu với các mục từ cả hai từ điển. Sau đó, bạn có thể giải nén từng tuple và có quyền truy cập vào các mục của cả hai từ điển cùng một lúc.
Lưu ý rằng, trong ví dụ trên, thứ tự đánh giá từ trái sang phải được đảm bảo. Bạn cũng có thể sử dụng chức năng Python từ
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 để lặp lại thông qua các bộ song song. Tuy nhiên, bạn sẽ cần phải xem xét điều đó, không giống như từ điển trong Python 3.6, các bộ don don giữ các yếu tố của chúng theo thứ tự. Nếu bạn quên chi tiết này, kết quả cuối cùng của chương trình của bạn có thể không hoàn toàn như bạn muốn hoặc mong đợi.
Giải nén một chuỗi
Có một câu hỏi xuất hiện thường xuyên trong các diễn đàn cho Pythonistas mới: Nếu có chức năng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 là rất tốt,
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8. Bạn có nhớ rằng hàm Python
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
8 hoạt động giống như một dây kéo thực sự không? Các ví dụ cho đến nay đã cho bạn thấy Python mọi thứ đã đóng lại như thế nào. Vì vậy, làm thế nào để bạn giải nén các đối tượng Python?
Giả sử bạn có một danh sách các bộ dữ liệu và muốn phân tách các yếu tố của mỗi tuple thành các chuỗi độc lập. Để làm điều này, bạn có thể sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
72 để giải nén dữ liệu, tạo hai danh sách khác nhau (
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
2 và
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
4).
Sắp xếp song song
Sắp xếp là một hoạt động phổ biến trong lập trình. Giả sử bạn muốn kết hợp hai danh sách và sắp xếp chúng cùng một lúc. Để làm điều này, bạn có thể sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
72 để giải nén dữ liệu, tạo hai danh sách khác nhau (
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
2 và
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
4).
Sắp xếp song song
Sắp xếp là một hoạt động phổ biến trong lập trình. Giả sử bạn muốn kết hợp hai danh sách và sắp xếp chúng cùng một lúc. Để làm điều này, bạn có thể sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
72 để giải nén dữ liệu, tạo hai danh sách khác nhau (
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
2 và
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
4).
Sắp xếp song song
Sắp xếp là một hoạt động phổ biến trong lập trình. Giả sử bạn muốn kết hợp hai danh sách và sắp xếp chúng cùng một lúc. Để làm điều này, bạn có thể sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
72 để giải nén dữ liệu, tạo hai danh sách khác nhau (
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
2 và
>>> zipped=zip()>>> next(zipped)Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration
4).
Sắp xếp song song
Sắp xếp là một hoạt động phổ biến trong lập trình. Giả sử bạn muốn kết hợp hai danh sách và sắp xếp chúng cùng một lúc. Để làm điều này, bạn có thể sử dụng
>>> numbers=[1,2,3]>>> letters=['a','b','c']>>> zipped=zip(numbers,letters)>>> zipped# Holds an iterator object<zip object at 0x7fa4831153c8>>>> type(zipped)<class 'zip'>>>> list(zipped)[(1, 'a'), (2, 'b'), (3, 'c')]
84, bạn cũng viết một đoạn mã tổng quát hơn. Điều này sẽ cho phép bạn sắp xếp bất kỳ loại trình tự, không chỉ danh sách.
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự.Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Lặp lại song song với chức năng Zip () của Python This tutorial has a related video course created by the
Real Python team. Watch it together with the written tutorial to deepen your understanding: Parallel Iteration With Python's zip() Function