这可能是一个非常简单的问题,但我希望有人能给我一个快速有效的答案……我正在尝试将染色体数据输入到数据库中,同时稍微改变一下格式。数据当前如下所示:
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的启动子,那么这个区域就不会被视为外显子区域。
发布于 2013-07-03 03:09:37
像这样的东西?
NewExonStart,NewExonEnd = zip(*filter(lambda y:not(y[0]>=PromoterStart and y[1]<=PromoterEnd),zip(ExonStart,ExonEnd)))您可以压缩成对的ExonStart,ExonEnd,并丢弃可能在PromoterStart,PromoterEnd之间包含ExonStart,ExonEnd的任何条目。然后解压压缩后的列表以获取新值
示例
>>> 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)ExonStart和ExonEnd的第一个条目将被删除,因为它位于PromoterStart和PromoterEnd之间
https://stackoverflow.com/questions/17429865
复制相似问题