Почему пустые строки не записываются с помощью метода index () в списках? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь получить индексы ячеек в строках.Это работает нормально, пока я не сталкиваюсь с пустыми строками.Ниже приводится MWE.

Следующие работы - нет пустых строк:

table = [['A', 'B', 'C'], ['1', '2', '3'], ['4', '5', '6']]

for row in table[1:]:
    row_ind = table.index(row)
    for cell in row:
        col_ind = row.index(cell)
        print('row_ind: ' + str(row_ind) + ' | col_ind: ' + str(col_ind))

Как и ожидалось, вывод:

row_ind: 1 | label_ind: 0
row_ind: 1 | label_ind: 1
row_ind: 1 | label_ind: 2
row_ind: 2 | label_ind: 0
row_ind: 2 | label_ind: 1
row_ind: 2 | label_ind: 2

Однако, снекоторые строки пусты, как в следующем примере:

table = [['A', 'B', 'C'], ['1', '', ''], ['', '', '6']]

for row in table[1:]:
    row_ind = table.index(row)
    for cell in row:
        col_ind = row.index(cell)
        print('row_ind: ' + str(row_ind) + ' | col_ind: ' + str(col_ind))

Индексы в выходных данных отключены: (Проблема также возникает, когда вместо пустых строк у меня нули):

row_ind: 1 | col_ind: 0
row_ind: 1 | col_ind: 1
row_ind: 1 | col_ind: 1
row_ind: 2 | col_ind: 0
row_ind: 2 | col_ind: 0
row_ind: 2 | col_ind: 2

Если я заменю все пустые строки на 'na', например:

table = [['A', 'B', 'C'], ['1', '', ''], ['', '', '6']]

table_new = []

for row in table:
    row_new = []
    for cell in row:
        if cell == '' or cell == '0':
            cell = 'na'
            row_new.append(cell)
        else:
            row_new.append(cell)
    table_new.append(row_new)

for row in table_new[1:]:
    row_ind = table_new.index(row)
    for cell in row:
        col_ind = row.index(cell)
        print('row_ind: ' + str(row_ind) + ' | col_ind: ' + str(col_ind))

Индексы в выводе все еще выключены:

row_ind: 1 | col_ind: 0
row_ind: 1 | col_ind: 1
row_ind: 1 | col_ind: 1
row_ind: 2 | col_ind: 0
row_ind: 2 | col_ind: 0
row_ind: 2 | col_ind: 2

Исправление было бы фантастическимтак что я могу использовать индексы, но я буду в порядке с альтернативой.Любая помощь и / или объяснение приветствуются.Заранее спасибо.

1 Ответ

0 голосов
/ 02 июля 2019

Спасибо, @RomanPerekhrest, который указал, что я пытался использовать метод index () неправильно.

Я решил проблему с enumerate - это обеспечивает именно ту функциональность, которую я искал,Вот снова мой MWE:

table = [['A', 'B', 'C'], ['1', '', ''], ['', '', '6']]

for row in table[1:]:
    row_ind = table.index(row)
    for cell in enumerate(row):
        col_ind = cell[0]
        print('row_ind: ' + str(row_ind) + ' | col_ind: ' + str(col_ind))

Это теперь дает мне:

row_ind: 1 | col_ind: 0
row_ind: 1 | col_ind: 1
row_ind: 1 | col_ind: 2
row_ind: 2 | col_ind: 0
row_ind: 2 | col_ind: 1
row_ind: 2 | col_ind: 2

Для тех, кто сталкивается с подобной проблемой, вот что перечисляет делает .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...