2016-07-14 2 views
0

Я пытаюсь прочитать матрицу (из другого файла) и проверить, являются ли цифры 1,2,3,4 или 5. Но когда i проверьте, проверены ли координаты (код ниже) x и y неверны.Неправильные координаты x и y при попытке чтения матрицы (python)

with open('/directory/to/file', 'r') as f: 
    for index,row in enumerate([line.split() for line in f]): 
     for i,num in enumerate(row): 
      if num == '1': 
       print(index,i,'=1') 
      elif num == '2': 
       print(index,i,'=2') 
      elif num == '3': 
       print(index,i,'=3') 
      elif num == '4': 
       print(index,i,'=4') 
      elif num == '5': 
       print(index,i,'=5') 

это моя матрица:

[[0,1,0,0,0], 
[0,2,0,0,0], 
[0,3,0,0,0], 
[0,0,4,0,0], 
[0,0,5,0,0]] 

, но это мой результат:

1 2 =1 
2 2 =2 
3 2 =3 
4 3 =4 
5 3 =5 

Я знаю, что должен сделать что-то с этой частью:

with open('/directory/to/file', 'r') as f: 
    for index,row in enumerate([line.split() for line in f]): 
     for i,num in enumerate(row): 

но я не знаю, как это исправить. Может кто-нибудь сказать мне, что я сделал неправильно?

+1

Это поможет, если вы разместите пример данных, вашего вывода и ожидаемого вывода. Но проблема в том, что все отключено на 1? –

+0

Я отредактирую свой вопрос, подожди минут – svs

+1

Я уверен, что это не ваш результат. Вы имели в виду то, что хотите? –

ответ

1

Проблема в том, что enumerate начинает перечисление с 0. Вы хотите, чтобы это началось с одного. Он имеет необязательный второй параметр, который позволяет сделать это:

class enumerate(object) 
| enumerate(iterable[, start]) -> iterator for index, value of iterable 
| 
| Return an enumerate object. iterable must be another object that supports 
| iteration. The enumerate object yields pairs containing a count (from 
| start, which defaults to zero) and a value yielded by the iterable argument. 
| enumerate is useful for obtaining an indexed list: 

Так что ваша проблема просто решается путем пропускания start аргумента, в вашем случае, 1:

with open('/directory/to/file', 'r') as f: 
    for i,row in enumerate([line.split() for line in f], 1): 
     for j,num in enumerate(row, 1): 
      if num in (1,2,3,4,5): 
       print(i,j,'=',num) 

Я также взял на себя смелость использования i и j для индексов, это кажется более естественным. Я также сделал тело вашей внутренней петли более кратким.