Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表索引超出python函数的范围_Python_List - Fatal编程技术网

列表索引超出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模块。添加一些解释可能会帮助其他人。添加一些解释可能会帮助其他人。