列表索引超出python函数的范围
我试图创建一个函数,它获取矩阵中最高行和最高列的和,并将它们相加 由于某种原因,我循环抛出每个列的函数给了我一个“列表索引超出范围错误”列表索引超出python函数的范围,python,list,Python,List,我试图创建一个函数,它获取矩阵中最高行和最高列的和,并将它们相加 由于某种原因,我循环抛出每个列的函数给了我一个“列表索引超出范围错误” def max(input1,input2,input3): newArray= list(input3) seq =newArray num = input1 num2 = input2 max_row = 0 max_column = 0 avg = len(seq) / float(num) out = [] last
def max(input1,input2,input3):
newArray= list(input3)
seq =newArray
num = input1
num2 = input2
max_row = 0
max_column = 0
avg = len(seq) / float(num)
out = []
last = 0.0
while last < len(seq):
out.append(seq[int(last):int(last + avg)])
last += avg
for i in out:
# print(sum(i))
if sum(i) > max_row:
max_row = sum(i)
# print(max_row)
for i in range(0,len(out)):
maxCols = 0
sumCols = 0;
# print(out)
for j in range(0,len(out[0])):
print(i)
sumCols = sumCols + out[j][i]
if sumCols > maxCols:
maxCols = sumCols
# print(out)
# print(maxCols)
return maxCols + max_row
# return seq
print(max(3,3,{3,6,9,1,4,7,2,8,9}))
Traceback (most recent call last):
File "main.py", line 36, in <module>
print(max(3,3,{3,6,9,1,4,7,2,8,9}))
File "main.py", line 27, in max
sumCols = sumCols + out[j][i]
IndexError: list index out of range
def最大值(输入1、输入2、输入3):
newArray=list(input3)
seq=newArray
num=输入1
num2=输入2
最大行=0
最大列=0
平均值=长度(顺序)/浮动(数量)
out=[]
last=0.0
而最后一个最大值行:
最大行=总和(i)
#打印(最大行)
对于范围内的i(0,len(out)):
maxCols=0
sumCols=0;
#打印(输出)
对于范围内的j(0,len(out[0]):
印刷品(一)
sumCols=sumCols+out[j][i]
如果sumCols>maxCols:
maxCols=sumCols
#打印(输出)
#打印(maxCols)
返回最大值+最大值行
#返回顺序
打印(最大值(3,3,{3,6,9,1,4,7,2,8,9}))
回溯(最近一次呼叫最后一次):
文件“main.py”,第36行,在
打印(最大值(3,3,{3,6,9,1,4,7,2,8,9}))
文件“main.py”,第27行,最大值
sumCols=sumCols+out[j][i]
索引器:列表索引超出范围
Set将删除重复的值,因此在max()函数的第一步之后,您的input3将变成[1,2,3,4,6,7,8,9],不再是3x3矩阵。
尝试在input3中使用list或tuple而不是set将删除重复值,因此在max()函数的第一步之后,input3将变成[1,2,3,4,6,7,8,9],不再是3x3矩阵。
尝试使用列表或元组,而不是在input3中设置。我建议使用Numpy来完成此任务。它包含矩阵/数组对象,大大简化了任务
import numpy as np
使用np.matrix()
定义矩阵,然后将其更改为np.array()
。您可以直接使用数组定义它,但使用矩阵对象,您可以以字符串格式写出值,而数组使用的是列表列表,这可能会让人困惑
我提出了matrix_max()
函数,它接收数组并分别迭代行和列。我给它起了一个与max
不同的名字,因为(1)它是一个内置Python函数的名字,(2)我们无论如何都需要它:)
如您所见,for循环首先迭代行,然后迭代列(这与转置矩阵的行相同)。这里的max
函数将根据现有的最高值检查新的行/列总和,最后返回两者的总和
def matrix_max(array):
max_row_sum = 0
for row in array:
max_row_sum = max(max_row_sum, sum(row))
max_col_sum = 0
for col in array.transpose():
max_col_sum = max(max_col_sum, sum(col))
return max_row_sum + max_col_sum
使用示例矩阵上的函数:
m = np.matrix('3,6,9;1,4,7;2,8,9')
a = np.array(m)
print(matrix_max(a))
打印出来的答案是44。我建议使用Numpy完成此任务。它包含矩阵/数组对象,大大简化了任务
import numpy as np
使用np.matrix()
定义矩阵,然后将其更改为np.array()
。您可以直接使用数组定义它,但使用矩阵对象,您可以以字符串格式写出值,而数组使用的是列表列表,这可能会让人困惑
我提出了matrix_max()
函数,它接收数组并分别迭代行和列。我给它起了一个与max
不同的名字,因为(1)它是一个内置Python函数的名字,(2)我们无论如何都需要它:)
如您所见,for循环首先迭代行,然后迭代列(这与转置矩阵的行相同)。这里的max
函数将根据现有的最高值检查新的行/列总和,最后返回两者的总和
def matrix_max(array):
max_row_sum = 0
for row in array:
max_row_sum = max(max_row_sum, sum(row))
max_col_sum = 0
for col in array.transpose():
max_col_sum = max(max_col_sum, sum(col))
return max_row_sum + max_col_sum
使用示例矩阵上的函数:
m = np.matrix('3,6,9;1,4,7;2,8,9')
a = np.array(m)
print(matrix_max(a))
打印出来的答案是44。
sumCols=sumCols+out[j][i]
→ sumCols=sumCols+out[i][j]
如果我们将out
视为一个二维表,i
是它的第一个维度,表示行索引,j
是它的第二个维度,表示列索引。你换它们是错误的
此外,python方法如下所示:
sumCols+=out[i][j]
sumCols=sumCols+out[j][i]
→ sumCols=sumCols+out[i][j]
如果我们将out
视为一个二维表,i
是它的第一个维度,表示行索引,j
是它的第二个维度,表示列索引。你换它们是错误的
此外,python方法如下所示:
sumCols+=out[i][j]
IDE中有调试器。试着使用它。错误消息包含的信息超过了查找问题所需的信息量。为什么将数组作为一个集合提供给{}。。打印(max(3,3,[3,6,9,1,4,7,2,8,9])应该更好,不是吗?以前我尝试用一个集合来完成它不会带来额外的依赖项,比如IDE中的numpyThere调试器。试着使用它。错误消息包含的信息超过了查找问题所需的信息量。为什么将数组作为一个集合提供给{}。。打印(max(3,3,[3,6,9,1,4,7,2,8,9])应该更好,不是吗?以前我尝试用一个集合来完成它不会带来额外的依赖项,就像numpyI搜索并最初将numpy视为一个选项一样,但是我不能再使用库了。我确实搜索过,最初将numpy视为一个选项,但是我不能再使用了libraries@RomaneGreenNumpy不适合有什么原因吗?这是一个非常强大和流行的Pythonian模块。@RomaneGreen Numpy不合适有什么原因吗?这是一个非常强大和流行的Python模块。添加一些解释可能会帮助其他人。添加一些解释可能会帮助其他人。