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

Nhân tùy chỉnh trong danh sách lồng nhau (list of lists) trong Python

Nhân hai danh sách trong Python là nhu cầu thường gặp trong tính toán phân tích dữ liệu. Bài viết này trình bày cách nhân các phần tử của một danh sách lồng nhau (nested list) với một danh sách khác.

Sử dụng vòng lặp lồng nhau

Cách tiếp cận này dùng hai vòng lặp for, một bên trong một. Vòng ngoài theo dõi số phần tử của danh sách chính, vòng trong theo dõi từng phần tử trong danh sách lồng nhau. Toán tử * dùng để nhân các phần tử của danh sách thứ hai với các phần tử tương ứng của danh sách lồng nhau.

Ví dụ

listA = [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
multipliers = [5, 11, 0]
# Danh sách gốc
print("Danh sách đã cho:", listA)
# Danh sách nhân
print("Danh sách nhân:", multipliers)
# Sử dụng vòng lặp
res = [[] for idx in range(len(listA))]
for i in range(len(listA)):
    for j in range(len(multipliers)):
        res[i] += [multipliers[i] * listA[i][j]]
# Kết quả
print("Kết quả nhân:", res)

Kết quả

Danh sách đã cho: [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
Danh sách nhân: [5, 11, 0]
Kết quả nhân: [[10, 55, 25], [33, 22, 88], [0, 0, 0]]

Sử dụng enumerate

Phương thức enumerate() có thể dùng để lấy từng phần tử của danh sách lồng nhau, sau đó dùng vòng lặp for để thực hiện phép nhân.

Ví dụ

listA = [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
multipliers = [5, 11, 0]
# Danh sách gốc
print("Danh sách đã cho:", listA)
# Danh sách nhân
print("Danh sách nhân:", multipliers)
# Sử dụng enumerate
res = [[multipliers[i] * j for j in x] for i, x in enumerate(listA)]
# Kết quả
print("Kết quả nhân:", res)

Kết quả

Danh sách đã cho: [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
Danh sách nhân: [5, 11, 0]
Kết quả nhân: [[10, 55, 25], [33, 22, 88], [0, 0, 0]]