这是一个非常简单的问题,但我想不出从昨晚开始怎么办。 假设我有一个列表:
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
我是怎么做到的?
答案 0 :(得分: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
答案 1 :(得分:1)
这是一个非常简单的默认指令。除最后一个字符串之外的每三个字母字符串可以被认为是一对或多对的开头。对于每个索引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
答案 2 :(得分: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