简体   繁体   English

从列表的元素Python中创建元组对

[英]make tuple pairs from list's element Python

It is very simple problem but I can not think of how to do it from last night. 这是一个非常简单的问题,但是从昨晚开始我想不起来该怎么做。 Say I have a list like: 说我有一个像这样的清单:

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

I have 12 elements in this list so I can make element like first element with second element would be first element and second element eith third element would be the second pair,and this follows the rest elements. 我在列表中有12个元素,因此我可以使像第一个元素那样的元素与第二个元素成为第一个元素,第二个元素或第三个元素成为第二对,而其余元素紧随其后。 Here is how it looks after making pairs: 配对后的外观如下:

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

Now I want to take first element from each pair and check if this element exists in other element as first element in pair; 现在,我要从每对中获取第一个元素,并检查该元素是否在其他元素中作为对中的第一个元素存在; if it does then I will print like: AAG -> AGA,AGA. 如果是的话,我将打印为:AAG-> AGA,AGA。 The 'AAG' appears in first pair and last pair as first element. “ AAG”出现在第一对和最后一对中作为第一个元素。 SO the whole output will be like: 因此,整个输出将类似于:

> AAG -> AGA,AGA

> AGA -> GAT

> ATT -> TTC

> CTA -> TAA

> CTC -> TCT

> GAT -> ATT

> TAA -> AAG

> TCT -> CTA,CTC

> TTC -> TCT

How do i it? 我该怎么办?

First part: 第一部分:

>>> 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')]

The second part is: 第二部分是:

>>> 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

It's a pretty simple defaultdict. 这是一个非常简单的defaultdict。 Every three letter string except the last one can be thought of as the start of one or more pairs. 除最后一个字母外,每三个字母串都可以视为一对或多对字母的开头。 For each index i, just append the string at i+1 to the list associated with with element i as the starting string. 对于每个索引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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM