2016-02-17 3 views
0

Это очень простая проблема, но я не могу придумать, как это сделать прошлой ночью. Скажем, у меня есть список, как:сделать пары кортежей из элемента списка Python

L = ['AAG', 'AGA', 'GAT', 'ATT', 'TTC', 'TCT', 'CTC', 'TCT', 'CTA', 
    'TAA', 'AAG', 'AGA'] 

У меня есть 12 элементов в этом списке, так что я могу сделать элемент как первый элемент со вторым элементом будет первым элементом и вторым элементом eith третий элемент будет вторая пара, и это следует за остальными элементами. Вот как это выглядит после того, как делают пар:

L = [('AAG', 'AGA'),('AGA', 'GAT'),('GAT', 'ATT'),('ATT', 
     'TTC'),('TTC', 'TCT'),('TCT', 'CTC'),('CTC', 'TCT'), 
    ('TCT', 'CTA'),('CTA', 'TAA'),('TAA', 'AAG'),('AAG', 'AGA')] 

Теперь я хочу взять первый элемент из каждой пары и проверить, если этот элемент существует в другом элементе как первый элемент в паре; если это произойдет, я напечатаю как: AAG -> AGA, AGA. «AAG» появляется в первой паре, а последняя пара - в качестве первого элемента. SO весь вывод будет как:

 
> AAG -> AGA,AGA 

> AGA -> GAT 

> ATT -> TTC 

> CTA -> TAA 

> CTC -> TCT 

> GAT -> ATT 

> TAA -> AAG 

> TCT -> CTA,CTC 

> TTC -> TCT 

Как мне это?

ответ

0
>>> L = ['AAG', 'AGA', 'GAT', 'ATT', 'TTC', 'TCT', 'CTC', 'TCT', 'CTA', 'TAA', 'AAG', 'AGA'] 
>>> L2 = zip(L, L[1:]) 
>>> from collections import defaultdict 
>>> D = defaultdict(list) 
>>> for i, j in L2: 
...  D[i].append(j) 
... 
>>> for k in sorted(D): 
...  print(k, "->", ",".join(D[k])) 
... 
AAG -> AGA,AGA 
AGA -> GAT 
ATT -> TTC 
CTA -> TAA 
CTC -> TCT 
GAT -> ATT 
TAA -> AAG 
TCT -> CTC,CTA 
TTC -> TCT 
+0

Большое вам спасибо. Вы только что сэкономили много головной боли. – Yousuf

1

Первая часть:

>>> L = ['AAG', 'AGA', 'GAT', 'ATT', 'TTC', 'TCT', 'CTC', 'TCT', 'CTA', 'TAA', 'AAG', 'AGA'] 
>>> zip(L,L[1:]) 
[('AAG', 'AGA'), ('AGA', 'GAT'), ('GAT', 'ATT'), ('ATT', 'TTC'), ('TTC', 'TCT'), ('TCT', 'CTC'), ('CTC', 'TCT'), ('TCT', 'CTA'), ('CTA', 'TAA'), ('TAA', 'AAG'), ('AAG', 'AGA')] 

Вторая часть:

>>> from itertools import groupby 
>>> LoT=zip(L, L[1:]) 
>>> for k, g in groupby(sorted(LoT), lambda t: t[0]): 
... print k, "->",",".join([e[1] for e in g]) 
... 
AAG -> AGA,AGA 
AGA -> GAT 
ATT -> TTC 
CTA -> TAA 
CTC -> TCT 
GAT -> ATT 
TAA -> AAG 
TCT -> CTA,CTC 
TTC -> TCT 
+0

спасибо. Это было полезно. – Yousuf

1

Это довольно простой defaultdict. Каждые три строки, кроме последней, можно рассматривать как начало одной или нескольких пар. Для каждого индекса i просто добавьте строку в i + 1 в список, связанный с элементом i в качестве начальной строки.

from collections import defaultdict 
L = ['AAG', 'AGA', 'GAT', 'ATT', 'TTC', 'TCT', 'CTC', 'TCT', 'CTA', 'TAA', 'AAG', 'AGA'] 

my_map = defaultdict(list) 
for i in range(len(L)-1): 
    my_map[L[i]] += [L[i+1]] 

for start, end in my_map.iteritems(): 
    print start, end 
+0

Спасибо. Меньше строк кодов. – Yousuf

Смежные вопросы