[英]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.