zip()
là một hàm tích hợp sẵn trong Python, cho phép kết hợp các phần tử từ các danh sách hoặc tuple thành một danh sách hoặc tuple các bộ phần tử được kết hợp với nhau. Hàm zip()
sẽ trả về một iterator chứa các bộ phần tử được kết hợp với nhau.
Cú pháp:
zip(*iterables)
Trong đó, *iterables
có thể là một danh sách các đối tượng iterable (danh sách, tuple, dict,…) chứa các phần tử cần được kết hợp.
Ví dụ 1:
numbers = [1, 2, 3]
colors = ['red', 'green', 'blue']
result = zip(numbers, colors)
print(list(result)) # output: [(1, 'red'), (2, 'green'), (3, 'blue')]
Ở ví dụ trên, chúng ta kết hợp các phần tử từ hai danh sách numbers
và colors
để tạo ra một danh sách các bộ phần tử, mỗi bộ gồm một số từ numbers
và một màu từ colors
.
Ví dụ 2:
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
genders = ["female", "male", "male"]
# Tạo ra một danh sách chứa các tuple gồm tên, tuổi và giới tính
people = zip(names, ages, genders)
# In ra từng tuple trong danh sách people
for person in people:
print(person)
Kết quả:
('Alice', 25, 'female')
('Bob', 30, 'male')
('Charlie', 35, 'male'
Ở ví dụ này, ta sử dụng hàm zip
để kết hợp các danh sách names
, ages
và genders
lại với nhau. Kết quả là một danh sách gồm các tuple, mỗi tuple chứa thông tin tên, tuổi và giới tính của một người. Ta có thể sử dụng vòng lặp để truy cập từng tuple trong danh sách people
và in ra các giá trị tương ứng.
Hàm zip
rất hữu ích khi ta cần kết hợp nhiều danh sách lại với nhau để tạo ra một danh sách mới. Nó cũng có thể được sử dụng để “bó” các giá trị lại với nhau khi ta cần thực hiện các thao tác như lặp qua nhiều danh sách cùng một lúc.
Ví dụ 3:
Giả sử bạn có hai danh sách lưu thông tin tên và điểm của các học sinh trong lớp:
names = ['John', 'Mary', 'David', 'Linda']
scores = [80, 90, 75, 85]
Bạn muốn kết hợp thông tin của hai danh sách này lại với nhau để tạo ra một danh sách mới lưu thông tin tên và điểm của từng học sinh. Bạn có thể sử dụng hàm zip()
để làm việc này:
student_info = list(zip(names, scores))
print(student_info) # output: [('John', 80), ('Mary', 90), ('David', 75), ('Linda', 85)]
Kết quả trả về là một danh sách các tuple, mỗi tuple lưu thông tin tên và điểm của một học sinh.
Ở ví dụ này, zip()
đã lấy từng phần tử đầu tiên của hai danh sách names
và scores
để tạo thành một tuple đầu tiên, tiếp đến lấy từng phần tử thứ hai của hai danh sách này để tạo thành tuple thứ hai, và tiếp tục cho đến khi lấy hết các phần tử của các danh sách. Kết quả trả về là một danh sách các tuple mới, trong đó mỗi tuple lưu thông tin tên và điểm của một học sinh.