Значения не вставляются в матрицу - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь построить матрицу с нуля, используя Python Списки в Hackerrank.
Проблема в том, что код отлично работает в возвышенном тексте, но не в консоли Hackerrank.
Он показывает эту ошибку.

Traceback (most recent call last):
  File "Solution.py", line 8, in <module>
    filter[k][j] = int(input())
ValueError: invalid literal for int() with base 10: '[[1, 0, 1], [0, 1, 0], [1, 0, 1]]'


Ввод

filter = []

for k in range(3):
    for j in range(3):
        filter[k][j] = int(input())


В чем может быть причина?
Существует ли более эффективный способ создания матриц с нуля. Любые предложения будут оценены. Спасибо!

1 Ответ

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

У вас есть 2 проблемы:


Hackerrank представляет ваш ввод в виде одной строки:

'[[1, 0, 1], [0, 1, 0], [1, 0, 1]]'

не как целые числа sinlge с последующим возвратом.

Вы нужно взять одну строку, а затем разделить ее. Проще всего было бы literal_eval создать полный список списков с помощью этой строковой записи.

from ast import literal_eval

inp = "[[1, 0, 1], [0, 1, 0], [1, 0, 1]]"  # use input() here

l = literal_eval(inp)

print(l) 
print(type(l))

, которая напечатает:

[[1, 0, 1], [0, 1, 0], [1, 0, 1]]
<class 'list'>

Ваш код не может быть запущен хорошо, как есть - это даст вам ошибку индекса:

Traceback (most recent call last):
  File "whatever.py", line 5, in <module>
    filter[k][j] = int(input())
IndexError: list index out of range

image of live test on pyfiddle.io

, потому что вы пытаетесь получить доступ к элементам вашего списка, которых еще нет :

filter = []

for k in range(3):
    for j in range(3):
        filter[k][j] = int(input())

filter - пустой список, вы не можете получить доступ / индексировать в filter[0][0] - вам нужно изменить его на

filter = []

for k in range(3):
    # add a new empty list
    filter.append([])   
    for j in range(3):
        # add stuff to the last list of filter
        filter[-1].append( int(input()) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...