簡體   English   中英

如何修復Python中的“ IndexError:列表分配索引超出范圍”錯誤?

[英]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)

請參閱這個可愛的調試博客以獲取幫助。

您對abc矩陣定義將生成3D矩陣,而不是所需的具有行和列的2D矩陣。

選項1

將占位符值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]]

選項2

為矩陣的每一行放置一個空列表, appendappend到每一行。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM