【问题标题】:make tuple pairs from list's element Python从列表元素Python制作元组对
【发布时间】:2016-02-17 05:03:47
【问题描述】:

这是一个非常简单的问题,但我从昨晚开始想不出该怎么做。 假设我有一个类似的列表:

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 -> 盖特 > ATT -> TTC > CTA -> TAA > CTC -> TCT > 盖特 -> ATT > TAA -> AAG > TCT -> CTA,CTC > TTC -> TCT

我是怎么做到的?

【问题讨论】:

    标签: python tuples


    【解决方案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
    

    【讨论】:

      【解决方案2】:
      >>> 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
      

      【讨论】:

      • 非常感谢。你只是省了很多麻烦。
      【解决方案3】:

      这是一个非常简单的默认字典。除了最后一个之外,每三个字母串都可以被认为是一对或多对的开始。对于每个索引 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-02
        • 2015-08-01
        • 2017-12-18
        • 1970-01-01
        • 2017-04-11
        • 1970-01-01
        • 2016-12-19
        • 2022-01-22
        相关资源
        最近更新 更多