十进制列表索引超出范围
Decimal list index out of range
我有一个代表巨大矩阵的文件:
54321
| This | Table | |
|:------: |:-----: |:-----: |
| 6.75 | 0 | 20020 |
| 1 | 0 | 13663 |
| 107.75 | 0 | 0 |
| 0.25 | 1 | 27508 |
| 5.5 | 1 | 10964 |
| 11 | 1 | 19826 |
| 9 | 1 | 19817 |
| 7.75 | 1 | 27525 |
| 1.75 | 1 | 13005 |
| 5.25 | 1 | 2441 |
| 1.75 | 1 | 17250 |
| 142.25 | 1 | 1 |
其中第一行是维度,第二行是一个元组,看起来像(来自稀疏矩阵的元素、行索引、列索引)。
我必须从此文件中读取维度并生成用于矩阵存储的向量。
def getLineIndex(a, x):
for lineIndex in range(0, len(a)):
diagonalValue, lineNumber = a[lineIndex][-1]
if lineNumber == x:
return lineIndex
return -1
def getColumnIndex(a, x, y):
line = a[x]
for i in range(0, len(line)):
value, columnNumber = line[i]
if columnNumber == y:
return i
return -1
def read_values(filename):
with open(filename,'r') as file:
n = int(file.readline())
b = list()
for i in range(0, n):
b.append((file.readline()))
a = list()
for line in file:
values = line.replace(",", " ").split()
value = Decimal(values[0])
x = int(values[1])
y = int(values[2])
lineIndex = getLineIndex(a, x)
if lineIndex != -1:
columnIndex = getColumnIndex(a, lineIndex, y)
if columnIndex != -1:
a[lineIndex][columnIndex][0] += value
else:
# #addNewColumn(a, value, lineIndex, y)
a[lineIndex].insert(0, [value, y])
但是我收到这个错误:
文件 "source.py",第 31 行,在 read_values 中
值 = 十进制(值 [0])
IndexError: 列表索引超出范围
感谢任何类型的帮助。
在您的第一行 54321
中,没有 space 或“,”。所以用 space 或 "," returns None 拆分。因此 values 数组为空。当您尝试访问 values[0]
时,将出现此错误:IndexError: list index out of range
。
这应该有效:
for line in file:
values = line.replace(",", " ").split() //line number 30
if len(values) == 0:
continue
value = Decimal(values[0])
我认为你的line
变量是空的,导致values
是空的,因为你已经遍历了所有的行并将它们放入b
,所以现在你是试图从文件底部读取,这很可能是读取空行。您可能希望在使用如下内容再次遍历每一行之前返回到文件的开头:file.seek(0, os)
。回到文件顶部后,您可以使用@NanduRaj 的解决方案跳过第一行并根据需要进行迭代。
我有一个代表巨大矩阵的文件:
54321
| This | Table | |
|:------: |:-----: |:-----: |
| 6.75 | 0 | 20020 |
| 1 | 0 | 13663 |
| 107.75 | 0 | 0 |
| 0.25 | 1 | 27508 |
| 5.5 | 1 | 10964 |
| 11 | 1 | 19826 |
| 9 | 1 | 19817 |
| 7.75 | 1 | 27525 |
| 1.75 | 1 | 13005 |
| 5.25 | 1 | 2441 |
| 1.75 | 1 | 17250 |
| 142.25 | 1 | 1 |
其中第一行是维度,第二行是一个元组,看起来像(来自稀疏矩阵的元素、行索引、列索引)。
我必须从此文件中读取维度并生成用于矩阵存储的向量。
def getLineIndex(a, x):
for lineIndex in range(0, len(a)):
diagonalValue, lineNumber = a[lineIndex][-1]
if lineNumber == x:
return lineIndex
return -1
def getColumnIndex(a, x, y):
line = a[x]
for i in range(0, len(line)):
value, columnNumber = line[i]
if columnNumber == y:
return i
return -1
def read_values(filename):
with open(filename,'r') as file:
n = int(file.readline())
b = list()
for i in range(0, n):
b.append((file.readline()))
a = list()
for line in file:
values = line.replace(",", " ").split()
value = Decimal(values[0])
x = int(values[1])
y = int(values[2])
lineIndex = getLineIndex(a, x)
if lineIndex != -1:
columnIndex = getColumnIndex(a, lineIndex, y)
if columnIndex != -1:
a[lineIndex][columnIndex][0] += value
else:
# #addNewColumn(a, value, lineIndex, y)
a[lineIndex].insert(0, [value, y])
但是我收到这个错误:
文件 "source.py",第 31 行,在 read_values 中 值 = 十进制(值 [0]) IndexError: 列表索引超出范围
感谢任何类型的帮助。
在您的第一行 54321
中,没有 space 或“,”。所以用 space 或 "," returns None 拆分。因此 values 数组为空。当您尝试访问 values[0]
时,将出现此错误:IndexError: list index out of range
。
这应该有效:
for line in file:
values = line.replace(",", " ").split() //line number 30
if len(values) == 0:
continue
value = Decimal(values[0])
我认为你的line
变量是空的,导致values
是空的,因为你已经遍历了所有的行并将它们放入b
,所以现在你是试图从文件底部读取,这很可能是读取空行。您可能希望在使用如下内容再次遍历每一行之前返回到文件的开头:file.seek(0, os)
。回到文件顶部后,您可以使用@NanduRaj 的解决方案跳过第一行并根据需要进行迭代。