Creating a Matrix in Python without numpy
Creating a Matrix in Python without numpy
You need to keep track of the current index in your loop.
Essentially you want to turn a list like 0,1,2,3,4,….24 (these are the indices of your initial array, alpha) into:
R1C1, R1C2, R1C3, R1C4, R1C5
R2C1, R2C2… etc
I added the logic to do this the way you are currently doing it:
def createMatrix(rowCount, colCount, dataList):
mat = []
for i in range(rowCount):
rowList = []
for j in range(colCount):
# you need to increment through dataList here, like this:
rowList.append(dataList[rowCount * i + j])
mat.append(rowList)
return mat
def main():
alpha = [a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]
mat = createMatrix(5,5,alpha)
print (mat)
main()
which then prints out:
[[a, b, c, d, e], [f, h, i, j, k], [l, m, n, o, p], [q, r, s, t, u], [v, w, x, y, z]]
The reason you were always receiving a,b,c,d,e
is because when you write this:
rowList.append(dataList[j])
what it is effectively doing is it is iterating 0-4 for every row. So basically:
i = 0
rowList.append(dataList[0])
rowList.append(dataList[1])
rowList.append(dataList[2])
rowList.append(dataList[3])
rowList.append(dataList[4])
i = 1
rowList.append(dataList[0]) # should be 5
rowList.append(dataList[1]) # should be 6
rowList.append(dataList[2]) # should be 7
rowList.append(dataList[3]) # should be 8
rowList.append(dataList[4]) # should be 9
etc.
You can use a list comprehension:
>>> li= [a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]
>>> [li[i:i+5] for i in range(0,len(li),5)]
[[a, b, c, d, e], [f, h, i, j, k], [l, m, n, o, p], [q, r, s, t, u], [v, w, x, y, z]]
Or, if you dont mind tuples, use zip:
>>> zip(*[iter(li)]*5)
[(a, b, c, d, e), (f, h, i, j, k), (l, m, n, o, p), (q, r, s, t, u), (v, w, x, y, z)]
Or apply list
to the tuples:
>>> map(list, zip(*[iter(li)]*5))
[[a, b, c, d, e], [f, h, i, j, k], [l, m, n, o, p], [q, r, s, t, u], [v, w, x, y, z]]