Индекс десятичного списка вне диапазона - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть файл, представляющий огромную матрицу:

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: список индексов вне диапазона

Я ценю любой тип справки.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

В вашей первой строке, которая 54321, нет пробела или ",". Таким образом, разделение пробелом или "," возвращает None. При этом массив значений пуст. Когда вы пытаетесь получить доступ к 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])
0 голосов
/ 09 апреля 2020

Я думаю, что ваша переменная line пуста, в результате чего values становится пустым, потому что вы уже перебрали все строки и поместили их в b, так что теперь вы пытаетесь читать снизу файл, который, вероятно, читает пустые строки. Возможно, вы захотите вернуться к началу файла перед повторением каждой строки снова, используя что-то вроде этого: file.seek(0, os). Вернувшись в начало файла, вы можете использовать решение @ NanduRaj, чтобы пропустить первую строку и выполнить итерацию по своему усмотрению.

...