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

Python - Chuyển danh sách 1D thành danh sách 2D độ dài biến đổi


Danh sách trong Python thường là 1D (phần tử liệt kê tuần tự). Danh sách 2D là danh sách lồng nhau. Bài viết này chỉ cách tạo danh sách 2D từ danh sách 1D cho trước, với các độ dài hàng được cung cấp.

Sử dụng append và chỉ số

Tạo vòng lặp qua các độ dài hàng, dùng làm chỉ số cắt danh sách gốc. Chỉ số bắt đầu từ 0, cộng dồn độ dài hàng vừa xử lý.

Ví dụ

# Danh sách gốc
listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
# Độ dài các hàng 2D cần
len_2d = [2, 4]

res = []
def convert(listA, len_2d):
    idx = 0
    for var_len in len_2d:
        res.append(listA[idx: idx + var_len])
        idx += var_len

convert(listA, len_2d)
print("Danh sách 2D mới:\n", res)

Kết quả:

Đầu ra

Danh sách 2D mới:
[['Sun', 'Mon'], ['Tue', 'Wed', 'Thu', 'Fri']]

Sử dụng islice

Hàm islice từ itertools cắt danh sách theo số lượng phần tử yêu cầu. Duyệt qua độ dài hàng, cắt lần lượt từ iterator của danh sách gốc.

Ví dụ

from itertools import islice

listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
len_2d = [3, 2]

def convert(listA, len_2d):
    res = iter(listA)
    return [list(islice(res, i)) for i in len_2d]

res = convert(listA, len_2d)
print("Danh sách 2D mới:\n", res)

Kết quả:

Đầu ra

Danh sách 2D mới:
[['Sun', 'Mon', 'Tue'], ['Wed', 'Thu']]