[英]How to fix “IndexError: list assignment index out of range” error in Python?
我是Python的初學者,幾乎沒有編碼經驗。 我已經開始編寫Python程序以將兩個矩陣相乘。 以下代碼為我提供了平方矩陣的輸出,但在我輸入時給出了以下錯誤,例如,m = 2,n = 3,p = 3,q = 2:
"a[i][j] = (int(input()))
IndexError: list assignment index out of range"
有人可以幫我這個忙嗎? 謝謝!
這是代碼:
m=int(input('Enter number of rows of matrix I:'))
n=int(input('Enter number of columns of matrix I:'))
p=int(input('Enter number of rows of matrix II:'))
q=int(input('Enter number of columns of matrix II:'))
if n!=p:
print('\nThese matrices cannot be multiplied!')
else:
a = [[[] for i in range(m)] for j in range(n)]
b = [[[] for i in range(p)] for j in range(q)]
c = [[[] for i in range(m)] for j in range(q)]
print('Enter elements of matrix I:')
for i in range(m):
for j in range(n):
print('Element (', i, ',', j, '):', end="")
a[i][j] = (int(input()))
print('Enter elements of matrix II:')
for i in range(p):
for j in range(q):
print('Element (', i, ',', j, '):', end="")
b[i][j] = (int(input()))
sum = 0
for i in range(m):
for j in range(q):
for k in range(n):
sum = sum + a[i][k] * b[k][j]
c[i][j] = sum
sum = 0
print('\nResultant matrix:')
for i in range(m):
for j in range(q):
print(c[i][j],"\t\t\t",end="")
print()
強文本
幾個簡單的跟蹤語句有助於發現問題:尺寸限制已切換。 嘗試這個:
print('Enter elements of matrix I:')
print("TRACE", a)
for i in range(n):
for j in range(m):
print('Element (', i, ',', j, '):', end="")
a[i][j] = (int(input()))
print("TRACE", a)
請參閱這個可愛的調試博客以獲取幫助。
您對a
, b
和c
矩陣定義將生成3D矩陣,而不是所需的具有行和列的2D矩陣。
將占位符值0
放置在矩陣的每個單元格中,如下所示:
# notice n is the number of columns and m is the number of rows
a = [[0 for i in range(n)] for j in range(m)] # this will create n zeroes within m lists
b = [[0 for i in range(q)] for j in range(p)]
c = [[0 for i in range(q)] for j in range(m)]
2x3 a和3x4的最終矩陣形狀
a = [[0, 0, 0], [0, 0, 0]]
b = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
c = [[0, 0, 0, 0], [0, 0, 0, 0]]
為矩陣的每一行放置一個空列表, append
列append
到每一行。
a = [[] for i in range(m)] # this will create m empty lists
b = [[] for i in range(p)]
c = [[] for i in range(m)]
結果矩陣是一個包含空列表行數的列表。
a = [[], []]
b = [[], [], []]
c = [[], []]
然后,由於列尚不存在,因此您希望追加而不是為matrix [i] [j]編制索引。
# within the two for loops asking for matrix values and in constructing the resulting matrix...
a[i].append((int(input())))
b[i].append((int(input())))
c[i].append(sum)
我只是發布完整的解決方案。 您可以閱讀@Endyd答案進行解釋。
m=int(input('Enter number of rows of matrix I:'))
n=int(input('Enter number of columns of matrix I:'))
p=int(input('Enter number of rows of matrix II:'))
q=int(input('Enter number of columns of matrix II:'))
if n!=p:
print('\nThese matrices cannot be multiplied!')
else:
# notice n is the number of columns and m is the number of rows
a = [[0 for i in range(n)] for j in range(m)] # this will create n zeroes within m lists
#print(a)
b = [[0 for i in range(q)] for j in range(p)]
#print(b)
c = [[0 for i in range(q)] for j in range(m)]
#print(c)
print('Enter elements of matrix I:')
for i in range(m):
for j in range(n):
#print('Element (', i, ',', j, '):')
a[i][j] = (int(input()))
print(a)
print('Enter elements of matrix II:')
for i in range(p):
for j in range(q):
#print('Element (', i, ',', j, '):')
b[i][j] = (int(input()))
print(b)
sum = 0
for i in range(m):
for j in range(q):
for k in range(n):
sum = sum + a[i][k] * b[k][j]
c[i][j] = sum
sum = 0
print('\nResultant matrix:')
for i in range(m):
for j in range(q):
print(c[i][j])
print(c)
'''
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.