Computer >> Máy Tính >  >> Lập trình >> Python

Python - Chuyển đổi danh sách 1D sang danh sách 2D có độ dài thay đổi

Danh sách trong python thường là danh sách 1D trong đó các phần tử được liệt kê lần lượt. Nhưng trong danh sách 2D, chúng tôi có danh sách được lồng vào bên trong danh sách bên ngoài. Trong bài này, chúng ta sẽ xem cách tạo danh sách 2D từ danh sách 1D cho trước. Chúng tôi cũng cung cấp các giá trị cho số phần tử bên trong danh sách 2D cho chương trình.

Sử dụng append và index

Trong cách tiếp cận này, chúng ta sẽ tạo một vòng lặp for để lặp qua từng phần tử trong danh sách 2D và sử dụng nó làm chỉ mục cho danh sách mới sẽ được tạo. Chúng tôi tiếp tục tăng giá trị chỉ mục bằng cách bắt đầu từ 0 và thêm nó vào phần tử mà chúng tôi nhận được từ danh sách 2D.

Ví dụ

# Given list
listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']

# Length of 2D lists needed
len_2d = [ 2, 4]

#Declare empty new list
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("The new 2D lis is: \n",res)

Chạy đoạn mã trên cho chúng ta kết quả sau -

Đầu ra

The new 2D lis is:
[[1, 2], [3, 4, 5, 6]]

Sử dụng islice

Hàm islice có thể được sử dụng để cắt một danh sách nhất định với một số phần tử nhất định theo yêu cầu của danh sách 2D. Vì vậy, tuần ở đây đã xem xét từng phần tử của danh sách 2D và sử dụng giá trị đó 2 cắt danh sách ban đầu. Chúng ta cần gói itertools để sử dụng hàm islice.

Ví dụ

from itertools import islice
# Given list
listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']

# Length of 2D lists needed
len_2d = [ 3, 2]

# Use islice
def convert(listA, len_2d):
   res = iter(listA)
   return [list(islice(res,i)) for i in len_2d]
res = [convert(listA, len_2d)]
print("The new 2D lis is: \n",res)

Chạy đoạn mã trên cho chúng ta kết quả sau -

Đầu ra

The new 2D lis is:
[[['Sun', 'Mon', 'Tue'], ['Wed', 'Thu']]]