Cách sử dụng hàm Zip trong Python

How Use Zip Function Python



Bài viết này sẽ trình bày hướng dẫn về hàm zip có sẵn trong thư viện mô-đun chuẩn của Python. Phương pháp này cho phép bạn kết hợp và ghép nối các phần tử của nhiều đối tượng có thể lặp lại. Sau đó, bạn có thể chạy logic hơn nữa trên các cặp này. Trong nhiều trường hợp, sử dụng một hàm zip hiệu quả và gọn gàng hơn nhiều so với việc sử dụng nhiều vòng lặp for lồng nhau.

Giới thiệu về hàm Zip

Như đã nêu trước đó, hàm zip được sử dụng để tạo các cặp từ các phần tử của nhiều đối tượng có thể lặp lại. Hãy xem xét ví dụ dưới đây để hiểu cú pháp cơ bản và cách sử dụng hàm zip:







list1= ['đến', 'NS', 'NS']
list2= ['quả táo', 'quả bóng', 'con mèo']
nén= zip(list1,list2)
in (danh sách(nén))

Hai câu lệnh đầu tiên trong đoạn mã mẫu trên xác định hai danh sách chứa một số phần tử. Tiếp theo, hàm zip được sử dụng bằng cách chuyển các biến list1 và list2 làm đối số. Đây là cú pháp chính của hàm zip. Bạn chỉ cần chuyển danh sách hoặc các vòng lặp có thứ tự hợp lệ khác làm đối số có các phần tử mà bạn muốn kết hợp. Cuối cùng, câu lệnh print được sử dụng để lấy đầu ra của biến nén. Sau khi chạy mẫu mã được đề cập ở trên, bạn sẽ nhận được kết quả sau:



[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Lưu ý rằng hàm zip trả về một đối tượng kiểu zip chứ không phải một danh sách. Bạn phải chuyển đổi nó thành kiểu có thể lặp lại, như được hiển thị trong câu lệnh in ở trên.



Nói một cách dễ hiểu, hàm zip chọn các phần tử của cùng một chỉ mục từ hai danh sách và kết hợp chúng thành một cặp trong một bộ. Vì vậy, phần tử thứ 0 từ list1 được kết hợp với phần tử thứ 0 của list2, phần tử thứ nhất từ ​​list1 được kết hợp với phần tử thứ nhất của list2, v.v. Hàm zip di chuyển từ trái sang phải và bộ tuple chứa các phần tử được ghép nối có cùng chỉ số với các phần tử được lưu trữ trong chúng.





Sử dụng Zip khi các tệp lặp lại không có cùng số phần tử

Trong ví dụ đã nêu ở trên, cả hai danh sách đều có số phần tử bằng nhau. Trong trường hợp bạn đang xử lý một số mã mà cả hai danh sách không có cùng số phần tử, thì hàm zip sẽ dừng lại ở phần tử cuối cùng của danh sách có số phần tử thấp nhất.

Trong ví dụ dưới đây, hàm zip sẽ dừng lại ở phần tử c, bất kể list2 có thêm một phần tử nữa.



list1= ['đến', 'NS', 'NS']
list2= ['quả táo', 'quả bóng', 'con mèo', 'con búp bê']
nén= zip(list1,list2)
in (danh sách(nén))

Sau khi chạy mẫu mã được đề cập ở trên, bạn sẽ nhận được kết quả sau:

[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Bạn có thể sử dụng nhiều hơn hai lặp lại khi sử dụng hàm Zip

Thông thường, hàm zip được sử dụng để so sánh hai đối tượng có thể lặp lại. Tuy nhiên, bạn có thể chuyển bất kỳ số lần lặp nào làm đối số cho hàm zip. Nguyên tắc dừng ở phần tử cuối cùng của danh sách ngắn nhất sẽ vẫn được áp dụng.

list1= ['đến', 'NS', 'NS']
list2= ['quả táo', 'quả bóng', 'con mèo', 'con búp bê']
list3= ['5', '3']
nén= zip(list1,list2,list3)
in (danh sách(nén))

Sau khi chạy mẫu mã được đề cập ở trên, bạn sẽ nhận được kết quả như sau:

[('a', 'apple', '5'), ('b', 'ball', '3')]

Tạo danh sách riêng lẻ từ một đối tượng loại Zip

Nếu bạn đã có một đối tượng zip, bạn có thể sử dụng nó để tạo lại các danh sách riêng lẻ đã được sử dụng trước đó khi hàm zip được gọi lần đầu tiên trên chúng.

list1= ['đến', 'NS', 'NS']
list2= ['quả táo', 'quả bóng', 'con mèo', 'con búp bê']
list3= ['5', '3']
nén= zip(list1,list2,list3)
l1,l2,l3= zip(* nén)
in (danh sách(l1), danh sách(l2), danh sách(l3))

Sau khi chạy mẫu mã được đề cập ở trên, bạn sẽ nhận được kết quả như sau:

['a', 'b'] ['apple', 'ball'] ['5', '3']

Trong mẫu mã ở trên, đối tượng zip được làm mờ bằng cách sử dụng toán tử *. Sau đó, kết quả bị lệch sẽ được đưa vào một hàm gọi tới zip khác để tạo danh sách ban đầu. Lưu ý rằng bạn có thể không lấy lại tất cả các phần tử trong danh sách ban đầu nếu danh sách có độ dài không bằng nhau được sử dụng khi đối tượng zip được tạo lần đầu tiên.

Sử dụng Zip khi bạn muốn giữ các phần tử không bị lặp lại lâu nhất

Trong nhiều ví dụ ở trên, bạn có thể nhận thấy rằng hàm zip theo mặc định dừng ở phần tử cuối cùng của phần tử ngắn nhất có thể lặp lại. Điều gì sẽ xảy ra nếu bạn muốn nó tiếp tục lặp lại cho đến khi nó đạt đến phần tử cuối cùng của phần tử dài nhất có thể lặp lại?

Trong trường hợp như vậy, bạn sẽ phải sử dụng phương thức zip_longest () từ mô-đun itertools của Python. Nó hoạt động giống như hàm zip, với một điểm khác biệt nhỏ là nó dừng lại ở phần tử cuối cùng của loại có thể lặp lại dài nhất.

từ itertools nhập khẩuzip_longest
list1= ['đến', 'NS', 'NS']
list2= ['quả táo', 'quả bóng', 'con mèo', 'con búp bê']
list3= ['5', '3']
nén=zip_longest(list1,list2,list3)
in (danh sách(nén))

Sau khi chạy mẫu mã được đề cập ở trên, bạn sẽ nhận được kết quả như sau:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (Không, 'búp bê', Không có) ]

Các giá trị bị thiếu được điền dưới dạng đối tượng loại Không có. Bạn cũng có thể cung cấp giá trị của riêng mình để điền bằng cách chuyển thêm một đối số giá trị điền vào phương thức zip_longest.

từ itertools nhập khẩuzip_longest
list1= ['đến', 'NS', 'NS']
list2= ['quả táo', 'quả bóng', 'con mèo', 'con búp bê']
list3= ['5', '3']
nén=zip_longest(list1,list2,list3,giá trị lấp đầy='my_value')
in (danh sách(nén))

Sau khi chạy mẫu mã được đề cập ở trên, bạn sẽ nhận được kết quả như sau:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ',' my_value ')]

Phần kết luận

Hàm zip có thể được mô phỏng bằng cách sử dụng một số vòng lặp và câu lệnh điều kiện. Tuy nhiên, nó giúp giữ cho mã có tổ chức và gọn gàng hơn bằng cách loại bỏ các câu lệnh lặp đi lặp lại và dài dòng không cần thiết.