Как получить нужный индекс матрицы
Есть список 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 шт):
"Транспонируем" входную "матрицу", лексикографически находим максимум вдоль каждого столбца.
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]