[英]How to make 'a new list of tuple pairs' from 'a list of tuple pairs' with the most frequent tuples?
[英]make tuple pairs from list's element Python
這是一個非常簡單的問題,但是從昨晚開始我想不起來該怎么做。 說我有一個像這樣的清單:
L = ['AAG', 'AGA', 'GAT', 'ATT', 'TTC', 'TCT', 'CTC', 'TCT', 'CTA',
'TAA', 'AAG', 'AGA']
我在列表中有12個元素,因此我可以使像第一個元素那樣的元素與第二個元素成為第一個元素,第二個元素或第三個元素成為第二對,而其余元素緊隨其后。 配對后的外觀如下:
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”出現在第一對和最后一對中作為第一個元素。 因此,整個輸出將類似於:
> AAG -> AGA,AGA > AGA -> GAT > ATT -> TTC > CTA -> TAA > CTC -> TCT > GAT -> ATT > TAA -> AAG > TCT -> CTA,CTC > TTC -> TCT
我該怎么辦?
第一部分:
>>> 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
這是一個非常簡單的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
>>> 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.