I want to convert a 1d list to 2d in python. I found a way to do it with NumPy, but it gives the following error when the length of the list is not divisible by the number of columns:
ValueError: cannot reshape array of size 9 into shape (4)
In the case that the length is not divisible, I want to add none to fill the spaces. Like so:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] b = some_func(a) print(b)
and the output should be:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, None, None, None]]
Please help me. My current code is:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] a = numpy.reshape(a, (-1, 4)) print(a)
Advertisement
Answer
This should work.
from math import ceil def my_reshape(arr, cols): rows = ceil(len(arr) / cols) res = [] for row in range(rows): current_row = [] for col in range(cols): arr_idx = row * cols + col if arr_idx < len(arr): current_row.append(arr[arr_idx]) else: current_row.append(None) res.append(current_row) return res