我正在尝试创建和初始化矩阵。我遇到的问题是,我创建的矩阵的每一行都是相同的,而不是遍历数据集。我试图通过检查值是否已经在矩阵中来纠正它,但是这并不能解决我的问题。
def createMatrix(rowCount, colCount, dataList):
mat = []
for i in range (rowCount):
rowList = []
for j in range (colCount):
if dataList[j] not in mat:
rowList.append(dataList[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)
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:['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']
我的问题是,我将仅获得返回的所有5个列表的第一个a,b,c,d,e列表
您需要跟踪循环中的当前索引。
基本上你想把一个像 0,1,2,3,4,....24 这样的列表(这些是你的初始数组的索引,alpha)变成:
R1C1、R1C2、R1C3、R1C4、R1C5、R2C1、R2C2...等
我添加了逻辑以按照您当前的方式执行此操作:
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()
Run Code Online (Sandbox Code Playgroud)
然后打印出:
[['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']]
Run Code Online (Sandbox Code Playgroud)
你总是收到的原因a,b,c,d,e是因为当你写这个的时候:
rowList.append(dataList[j])
Run Code Online (Sandbox Code Playgroud)
它有效地做的是对每一行迭代 0-4。所以基本上:
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
Run Code Online (Sandbox Code Playgroud)
等等。
您可以使用列表理解:
>>> 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']]
Run Code Online (Sandbox Code Playgroud)
或者,如果您不介意元组,请使用 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')]
Run Code Online (Sandbox Code Playgroud)
或应用于list元组:
>>> 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']]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24605 次 |
| 最近记录: |