Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Gom phần tử cùng chỉ số trong đa danh sách (multi-list) Python


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.