Trong hướng dẫn này, ta viết chương trình kết hợp phần tử cùng chỉ số từ các list khác nhau thành một list duy nhất. Có một ràng buộc: tất cả list phải cùng độ dài. Xem ví dụ để hiểu rõ hơn.
Đầu vào
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Đầu ra
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Ta giải quyết nhiều cách. Xem cách dùng vòng lặp thường.
- Khởi tạo list chứa list.
- Khởi tạo list rỗng.
- Khởi tạo biến index = 0.
- Lặp qua độ dài sub list lần
- Thêm list con rỗng vào list trước
- Lặp lists length lần.
- Thêm **lists[current_index][index]** vào **result[index]**
- In kết quả.
Ví dụ
# Khởi tạo list
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# List rỗng
result = []
# Biến index = 0
index = 0
# Lặp qua độ dài sub_list (3) lần
for i in range(len(lists[0])):
# Thêm sub_list rỗng
result.append([])
# Lặp lists length (3) lần
for j in range(len(lists)):
# Thêm phần tử vào result
result[index].append(lists[j][index])
# Chuyển sang index tiếp theo
index += 1
# In kết quả
print(result) Kết quả
Nếu chạy mã trên, bạn sẽ nhận được kết quả sau.
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Ta giải quyết dùng hàm zip không tốn công sức. zip cho tất cả phần tử cùng chỉ số trong tuple như mong muốn. Xem mã.
Ví dụ
# Khởi tạo list lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # Dùng zip và in print(list(zip(*lists)))
Kết quả
Nếu chạy mã trên, bạn sẽ nhận được kết quả sau.
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
Ta chuyển tuple thành list bằng lặp qua list. Có thể làm khác. Dùng hàm map chuyển tất cả tuple thành list. Mã một dòng.
Ví dụ
# Khởi tạo list lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # Dùng zip và in print(list(map(list, zip(*lists))))
Kết quả
Nếu chạy mã trên, bạn sẽ nhận được kết quả sau.
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Ta dùng map lặp qua list chuyển mỗi tuple thành list. Bạn làm tương tự với vòng lặp. Thử xem.
Kết luận
Nếu có thắc mắc trong hướng dẫn, hãy đề cập ở phần bình luận.