gpt4 book ai didi

python - 我将如何解决此 Python 代码中的 'list index out of range' 错误?

转载 作者:行者123 更新时间:2023-11-28 18:01:08 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来检查用户输入的矩阵的对称性。如果矩阵是对称的,则打印 true。如果不是,则打印 false。

def symmetric(mat, N): 
for i in range(N):
for j in range(N):
if (mat[i][j] != mat[j][i]):
return False
return True

mat = []
if (symmetric(mat, 3)):
print ('true')
else:
print ('false')

一旦我添加了 mat = [],问题就开始了。 IndexError: list index out of range 在我运行该函数后显示。

我添加了一个预定义的矩阵 mat = [[1, 2, 3], [2, 5, 4], [3, 4, 7]] 并且效果很好,但我需要用户输入矩阵

最终结果应该与此类似

>>> m1 = [[1, 2, 3], [2, 5, 4], [3, 4, 7]]
>>> symmetric(m1)
True

最佳答案

可能更有帮助的是使用 numpy array .它允许您利用 shape 属性来检查矩阵是否为正方形,然后您无需输入维度大小

import numpy as np 

mat = np.array([[1, 2, 3], [2, 5, 4], [3, 4, 7]])

def symmetric(mat):
rows, cols = mat.shape
if rows != cols:
raise ValueError("Invalid matrix isn't square")

for i in range(rows):
for j in range(cols):
if (mat[i][j] != mat[j][i]):
return False
return True

try:
is_symmetric = symmetric(mat)
except ValueError as e:
print(e)

Numpy 是一个您需要pip install 的包,但这使您可以很容易地先发制人地处理非方形情况。此外,allclose 函数可以让您快速检查数组的对称性,如 this question 中所述。 ,或者按照@Sheldore 的建议:

def symmetric(mat):
if (mat.T == mat).all():
return True
return False

mat = np.array([[1, 2, 3], [2, 5, 4], [3, 4, 7]])

原生列表方法

您可以将列表理解方法与 all 操作结合使用:

def symmetric(mat, N):
# This is a pretty naive way to check the dimensions in a similar fashion
# as np.shape, but this gets the thought process across
row, col = len(mat[0][:]), len(mat[:][0])

if row != col:
raise ValueError("Non-square matrix is invalid")

if all([mat[i][j] == mat[j][i] for i, j in zip(range(row), range(col))]:
return True
return False

关于python - 我将如何解决此 Python 代码中的 'list index out of range' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55669727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com