Create a 2D list out of 1D list
Question:
I am a bit new to Python and I want to convert a 1D list to a 2D list, given the width
and length
of this matrix
.
Say I have a list=[0,1,2,3]
and I want to make a 2 by 2
matrix of this list.
How can I get matrix [[0,1],[2,3]]
width
=2, length
=2 out of the list
?
Answers:
Try something like that:
In [53]: l = [0,1,2,3]
In [54]: def to_matrix(l, n):
...: return [l[i:i+n] for i in xrange(0, len(l), n)]
In [55]: to_matrix(l,2)
Out[55]: [[0, 1], [2, 3]]
I think you should use numpy, which is purpose-built for working with matrices/arrays, rather than a list of lists. That would look like this:
>>> import numpy as np
>>> list_ = [0,1,2,3]
>>> a = np.array(list_).reshape(2,2)
>>> a
array([[0, 1],
[2, 3]])
>>> a.shape
(2, 2)
Avoid calling a variable list
as it shadows the built-in name.
not as elegant and pretty specific to yours, but you create 2 lists (every other integer) and zip/list them back together.
full_list = [0, 1, 2, 3]
list1 = []
list2 = []
for i in full_list:
if i % 2 == 0:
list1.append(i)
else:
list2.append(i)
zip_list = zip(list1, list2)
done = list(zip_list)
output:
[(0, 1), (2, 3)]
I am a bit new to Python and I want to convert a 1D list to a 2D list, given the width
and length
of this matrix
.
Say I have a list=[0,1,2,3]
and I want to make a 2 by 2
matrix of this list.
How can I get matrix [[0,1],[2,3]]
width
=2, length
=2 out of the list
?
Try something like that:
In [53]: l = [0,1,2,3]
In [54]: def to_matrix(l, n):
...: return [l[i:i+n] for i in xrange(0, len(l), n)]
In [55]: to_matrix(l,2)
Out[55]: [[0, 1], [2, 3]]
I think you should use numpy, which is purpose-built for working with matrices/arrays, rather than a list of lists. That would look like this:
>>> import numpy as np
>>> list_ = [0,1,2,3]
>>> a = np.array(list_).reshape(2,2)
>>> a
array([[0, 1],
[2, 3]])
>>> a.shape
(2, 2)
Avoid calling a variable list
as it shadows the built-in name.
not as elegant and pretty specific to yours, but you create 2 lists (every other integer) and zip/list them back together.
full_list = [0, 1, 2, 3]
list1 = []
list2 = []
for i in full_list:
if i % 2 == 0:
list1.append(i)
else:
list2.append(i)
zip_list = zip(list1, list2)
done = list(zip_list)
output:
[(0, 1), (2, 3)]