2016-09-09 1 views
0

У меня есть список с 3 последовательностямиКак извлечь столбцы из нескольких строк в Python с помощью вложенных циклов?

seq_list = ['ACGT', 'ATTT', 'ACCC'] 

Я хочу, чтобы извлечь столбцы из списка и сохранить его в другом списке с помощью вложенных циклов в Python

Конечный результат должен быть

seq_list = ['AAA', 'CTC', 'GTC','TTC'] 

Я написал следующий код, но он не дает желаемого результата.

column = [] 
for i in range(len(seq_list[0])): #Length of the row 
    for j in range(len(seq_list)): #Length of the column 
     column.append(seq_list[j][i]) 
     print column 
+0

Не должен ли последний элемент быть «TTC»? – alecxe

+0

Программы с синтаксическими ошибками не выдают никакого вывода. –

+0

Почему вы хотите вложенные циклы, это задание? –

ответ

2

По вашему методу я сделал небольшой модификации, для каждого внутреннего for цикла я создал string, а затем после того, как внутренний for цикл заканчивается я приложил его к column:

seq_list = ['ACGT', 'ATTT', 'ACCC'] 
column = [] 
for i in range(len(seq_list[0])): #Length of the row 
    string = "" 
    for j in range(len(seq_list)): #Length of the column 
     string += seq_list[j][i] 
    column.append(string) 
print column 

Выход:

['AAA', 'CTC', 'GTC', 'TTC'] 

Хотя вы можете использовать @alecxe код (с помощью zip и join). Я думаю, что это круто и более питонично.

+0

Спасибо! Он работает отлично. –

1

В качестве альтернативы, вы можете "zip" the sequence и join:

>>> [''.join(item) for item in zip(*seq_list)] 
['AAA', 'CTC', 'GTC', 'TTC'] 
+1

Хотя он работает, ОП запросил решение, используя вложенные циклы. – RafaelC

+1

@ RafaelCardoso да, хорошо, немного измените формулировку, чтобы отразить, что это альтернативный способ, спасибо. – alecxe

+0

Спасибо за помощь. Если я использую этот метод, мне нужно установить «zip» в библиотеке Python? –

-2
new_seq_list = reduce(
    lambda new_seq_list,item: 
    new_seq_list + [''.join([item.pop(0) for item in new_seq_list[0]])] 
    , range(max([len(item) for item in seq_list])) , 
    [[list(item) for item in seq_list]] 
)[1:] 
  1. преобразовать исходный список в список список-оф-символов, а не список строк
  2. сократить этот список для каждого символа в самой длинной строке
  3. каждое сокращение, добавить новый список содержит строку, состоящую из первого элемента, удаляемого из каждого списка символов, соединенных вместе.
  4. в конце, удалите список пустых списков с начала последовательности.