python数据结构不清晰,解析python

2024-04-26 17:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小的数据集,我用它来获得BioPython的pairwise2模块的全局比对结果。到目前为止,我已经得到了对齐和评分结果,现在我对结果的结构以及如何分析结果有疑问

下面是我的代码:

import pandas as pd
from Bio import pairwise2
from Bio.SubsMat import MatrixInfo as matlist

matrix = matlist.blosum62
match = 5
mismatch = -4 
gap_open = -10
gap_extend = -0.5


df = {'ID': ['H576','H577','H578'],
  'CD': ['GCACGCATAAGTAGT', 'GCGAGGGGGGCTTC', 'GCGAGAGATCGGG']}


df = pd.DataFrame(df)


dictionary = df.set_index('ID')['CD'].to_dict()

seq = dictionary.get('H576')

for seq0 in df.CD:
        alns = pairwise2.align.globalms(seq, seq0,  match, mismatch,    gap_open, gap_extend)
        print(alns)

结果是:

 [('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)]

 [('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20), ('GCACGCATAAGTAGT-----', 'GC------GAGGGGGGCTTC', -15.5, 0, 20)], ....]

 [('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21), ('GC------ACGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)]GGGGGC--------TTCAGAGAGTTATAGGCTGTTTGACTAC', 'GTGAGAGATGCGCCGCGTATTC---GA-----AGCTTCTTTGACTAC', 55.5, 0, 47)],....] 

我的问题:

很明显,结果包含3个主要集合,但上面的结果是什么数据结构?套?元组?集合和元组?

我只想查看每组中的第一组项目:

('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)

('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20)

('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)

然后在一个循环中,将每个集合的第一个序列指定为seq0,将每个序列的第二个序列指定为seq1,然后我将对它们做一些处理:

所以对于第一组:

seq0 = 'GCACGCATAAGTAGT'
seq1 = 'GCACGCATAAGTAGT'

第二套:

seq0 = 'GCACGCATAAGTAGT-----'
seq1 = 'GCG------AGGGGGGCTTC'

第三套:

seq0 = 'GCA------CGCATAAGTAGT'
seq1 = 'GCGAGAGATCG--------GG'

Tags: importdfcd序列gapgggcaseq1
3条回答

在我看来,它们是元组列表。你知道吗

[]表示列表

()表示元组(只读列表)

要实现您的要求,最简单的方法是将列表中的项目编入索引,如下所示:

# Renamed seq0 so it doesn't interfere with below variable
for sequence0 in df.CD:
    alns = pairwise2.align.globalms(seq, sequence0,  match, mismatch, gap_open, gap_extend)
    # This is how you would get the first group of items from each tuple
    first_group_of_items = alns[0]

    # Now to get the seq variables you asked for
    # Since this variable is seq0, the above seq0 was renamed
    seq0 = first_group_of_items[0]
    seq1 = first_group_of_items[1]

我怀疑有一个更好的命名策略,你可以使用,但我不知道足够的生物学知识,以帮助你在该部门。你知道吗

在你的例子中,你有一个元组列表。你知道吗

要访问每个列表的第一个元素,只需执行以下操作:

list[0]

因为列表包含元组,所以它将返回完整的元组。你知道吗

得到元组后,可以将前两个值取为:

seq0 = tuple[0]
seq1 = tuple[1]

如果不想存储中间值,可以直接执行以下操作:

seq0 = list[0][0]
seq1 = list[0][1]

我希望有帮助。祝您有个美好的一天。你知道吗

要添加到示例中:

In [16]: A =  [('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)]

In [17]: A[0]
Out[17]: ('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15)

In [18]: A[0][0]
Out[18]: 'GCACGCATAAGTAGT'

In [19]: A[0][1]
Out[19]: 'GCACGCATAAGTAGT'

看起来像list[]tuples()。你知道吗

如果确定要保留第一个,请保留第一个:

sequences = []
for seq0 in df.CD:
    alns = pairwise2.align.globalms(seq, seq0,  match, mismatch,    gap_open, gap_extend)
    sequences.append(alns[0])

这样您将得到:

sequences == [('GCACGCATAAGTAGT', 'GCACGCATAAGTAGT', 75, 0, 15),
              ('GCACGCATAAGTAGT-----', 'GCG------AGGGGGGCTTC', -15.5, 0, 20),
              ('GCA------CGCATAAGTAGT', 'GCGAGAGATCG--------GG', -9.0, 0, 21)]

这就是你所需要的,然后要对它们做些什么,只需遍历列表:

for seq1, seq2, *rest in sequences:
    # Do the job with seq1 and seq2...

如果你关心这三个值(并且知道它们的含义),你应该正确地命名它们,而不是像我一样:

for seq1, seq2, name, this, properly in sequences:
    # Do the job with seq1, seq2, name, this, and properly.

相关问题 更多 >