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
?
asked Feb 4, 2013 at 6:45
1
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]]
answered Feb 4, 2013 at 6:51
rootroot
72k25 gold badges104 silver badges119 bronze badges
1
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.
answered Feb 4, 2013 at 7:00
wimwim
311k94 gold badges569 silver badges709 bronze badges
3
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]]
answered Sep 8 at 4:20
Given a 2D list, Write a Python program to convert the given list into a flattened list.
Method #1: Using chain.iterable[]
Python3
from
itertools
import
chain
ini_list
=
[[
1
,
2
,
3
],
[
3
,
6
,
7
],
[
7
,
5
,
4
]]
print
[
"initial list "
,
str
[ini_list]]
flatten_list
=
list
[chain.from_iterable[ini_list]]
print
[
"final_result"
,
str
[flatten_list]]
Output:
initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] final_result [1, 2, 3, 3, 6, 7, 7, 5, 4]
Method #2: Using list comprehension
Python3
from
itertools
import
chain
ini_list
=
[[
1
,
2
,
3
],
[
3
,
6
,
7
],
[
7
,
5
,
4
]]
print
[
"initial list "
,
str
[ini_list]]
flatten_list
=
[j
for
sub
in
ini_list
for
j
in
sub]
print
[
"final_result"
,
str
[flatten_list]]
Output:
initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] final_result [1, 2, 3, 3, 6, 7, 7, 5, 4]
Method #3: Using functools.reduce
Python3
from
functools
import
reduce
ini_list
=
[[
1
,
2
,
3
],
[
3
,
6
,
7
],
[
7
,
5
,
4
]]
print
[
"initial list "
,
str
[ini_list]]
flatten_list
=
reduce
[
lambda
z, y :z
+
y, ini_list]
print
[
"final_result"
,
str
[flatten_list]]
Output:
initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] final_result [1, 2, 3, 3, 6, 7, 7, 5, 4]
Method
#4: Using sum
sum has an optional argument: sum[iterable [, start]]
Python3
ini_list
=
[[
1
,
2
,
3
],
[
3
,
6
,
7
],
[
7
,
5
,
4
]]
print
[
"initial list "
,
str
[ini_list]]
flatten_list
=
sum
[ini_list, []]
print
[
"final_result"
,
str
[flatten_list]]
Output:
initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] final_result [1, 2, 3, 3, 6, 7, 7, 5, 4]
Method #5: Using lambda
Python3
ini_list
=
[[
1
,
2
,
3
],
[
3
,
6
,
7
],
[
7
,
5
,
4
]]
flatten_list
=
lambda
y:[x
for
a
in
y
for
x
in
flatten_list[a]]
if
type
[y]
is
list
else
[y]
print
[
"Initial list "
,ini_list]
print
[
"Flattened List "
,flatten_list[ini_list]]
Output:
Initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] Flattened List [1, 2, 3, 3, 6, 7, 7, 5, 4]
Method #6: Using numpy
Python3
import
numpy
ini_list
=
[[
1
,
2
,
3
],
[
3
,
6
,
7
],
[
7
,
5
,
4
]]
print
[
"Initial list "
,ini_list]
print
[
"Flattened List "
,
list
[numpy.concatenate[ini_list].flat]]
Output:
Initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] Flattened List [1, 2, 3, 3, 6, 7, 7, 5, 4]
Method #7: Using extend[] method
Python3
ini_list
=
[[
1
,
2
,
3
],[
3
,
6
,
7
],[
7
,
5
,
4
]]
print
[
"Initial list "
,ini_list]
res
=
[]
for
i
in
ini_list:
res.extend[i]
print
[
"Flattened List "
,res]
Output
Initial list [[1, 2, 3], [3, 6, 7], [7, 5, 4]] Flattened List [1, 2, 3, 3, 6, 7, 7, 5, 4]