Как получить нужный индекс матрицы

Есть список one_line_list

[['A', '-', 'A', '-', '-', '-'], ['-', 'G', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', 'C', '-']]

Первый вложенный список отвечает за букву А.
Второй вложенный список отвечает за букву G.
Третий вложенный список отвечает за букву T.
Четвёртый вложенный список отвечает за букву C.

В финале в строке должно быть 6 символов (т.к. каждый вложенный всегда длиной в 6 элементов)

Например такая ситуация невозможна, т.к. здесь G тоже на первом месте. Этого не будет, т.к. A уже и так на первом месте

[['A', '-', 'A', '-', '-', '-'], ['G', 'G', '-', '-', '-', '-'], ['-'...

Как из этого списка можно сделать строку

'AGA--C-'

P.S. Буквы в каждом списке не могут находиться на одинаковых местах, например: Если в первом списке первая буква А, то в итоге в нашей строке первая буква = А. Другие буквы не могут стоять теперь на первом месте

Проблема в том, что если код находит знак -, то добавляет его индекс, самый первый попавшийся, а мне нужен именно тот индекс, на котором я уже нахожусь:

for word in one_line_list:
    for letter in word:
        if letter == '-':
            res_one_word[word.index(letter)] = letter
         else:
            res_one_word[word.index(letter)] = letter # добавляет в самый первый индекс, ведь знак "-" есть и на первом индексе

Ответы (1 шт):

Автор решения: user207200

"Транспонируем" входную "матрицу", лексикографически находим максимум вдоль каждого столбца.

m = [['A', '-', 'A', '-', '-', '-'], 
     ['-', 'G', '-', '-', '-', '-'], 
     ['-', '-', '-', '-', '-', '-'], 
     ['-', '-', '-', '-', 'C', '-']]

print(''.join(map(max, zip(*m))))  # -> AGA-C-

Добавлю некоторые пояснения. Видно, что для выяснения значения на каждой позиции строки необходимо проверить элемент на соответствующей позиции в каждом из списков. Это наводит на мысль, что входные данные надо реорганизовать таким образом, чтобы все символы соответсвующей позиции находились внутри одного списка(транспонирование).

print(tuple(zip(*s)))

(('A', '-', '-', '-'),
 ('-', 'G', '-', '-'),
 ('A', '-', '-', '-'),
 ('-', '-', '-', '-'),
 ('-', '-', '-', 'C'),
 ('-', '-', '-', '-'))

Далее необходимо определить, что буквы имеют приоритет над символом дефиса. Это делается с помощью лексикографического сравнения.

[l > "-" for l in ('A', 'G', 'C', 'T')]  # -> [True, True, True, True]
→ Ссылка