0

这可能是一个非常简单的问题,但我希望有人可以为我提供快速有效的答案......我正在尝试将染色体数据输入数据库,同时稍微改变格式。目前的数据如下:

chrom   = chr1
txStart = 134212702 
exonCount = 8
exonStarts = 134212702,134221529,134222782,134224273,134224707,134226534,134227135,134227897,
exonEnds=   134213049,134221650,134222806,134224425,134224773,134226654,134227268,134229870,

我正在创建一个包含所有上述数据的数据库,包括启动子、外显子和内含子位置的信息。每组数据(来自单行,例如上面的示例)将对应于单个转录本。我将启动子定义为 txStart(例如 134212702)- 2000。然后每个转录本都有一组外显子数量,如外显子计数(例如 8)中所指定。较大转录本中每个外显子的开始和结束由 exonStarts 和 exonEnds 列表中的匹配值指定。例如,在这种情况下,第一个外显子的范围从 134212702 到 134213049。内含子位于外显子之间,因此第一个外显子将从 134213050 到 134221528。我成功地完成了这项工作:

PromoterStart = int(TxStart) - 2000
PromoterEnd = int(TxStart) -1
ExonStart = map(int, ExonStart[:-1].split(","))
ExonEnd = map(int, ExonEnd[:-1].split(","))
i = 0
while i < int(ExonCount):
    ExonCount = i +1
    if i != int(ExonCount) -1:
        IntronStart[i] = ExonEnd[i] +1
        IntronEnd[i] = ExonStart[i+1] -1
    i += 1

使用这种方法,我将所有数据插入数据库以供以后比较。我现在想使用从 TxStart -2000 到 TxStart + 2000 的启动子定义重新进行此分析。但是,似乎使用此代码的外显子和启动子之间有大量重叠,只需将启动子结束更改为 = int (TxStart) +2000,大大减慢了我的下游分析。我想找到一种方法,如果一个区域被认为是从 txStart -2000 到 txStart +2000 的启动子,则该区域不会被视为外显子区域。

4

1 回答 1

1

像这样的东西?

NewExonStart,NewExonEnd = zip(*filter(lambda y:not(y[0]>=PromoterStart and y[1]<=PromoterEnd),zip(ExonStart,ExonEnd)))

您快速浏览成对ExonStart,ExonEnd并丢弃可能ExonStart,ExonEnd介于. 之间的任何条目PromoterStart,PromoterEnd。然后解压缩压缩列表以获取新值

例子

>>> TxStart = 134212702 
>>> PromoterStart = int(TxStart) - 2000
>>> PromoterEnd = int(TxStart) + 2000
>>> PromoterStart
134210702
>>> PromoterEnd
134214702
>>>
>>> ExonStart
[134212702, 134221529, 134222782, 134224273, 134224707, 134226534, 134227135, 134227897]
>>> ExonEnd
[134213049, 134221650, 134222806, 134224425, 134224773, 134226654, 134227268, 134229870]
>>>
>>> NewExonStart,NewExonEnd = zip(*filter(lambda y:not(y[0]>=PromoterStart and y[1]<=PromoterEnd),zip(ExonStart,ExonEnd)))
>>>
>>> NewExonStart
(134221529, 134222782, 134224273, 134224707, 134226534, 134227135, 134227897)
>>> NewExonEnd
(134221650, 134222806, 134224425, 134224773, 134226654, 134227268, 134229870)

两者的第一个条目ExonStartExonEnd被删除,因为它位于PromoterStart和之间PromoterEnd

于 2013-07-02T19:09:36.537 回答