从字符串中提取零件(python)
我有一个包含如下字符串的文件:从字符串中提取零件(python),python,string,Python,String,我有一个包含如下字符串的文件: NM_???? chr12 - 10 110 10 110 3 10,50,100, 20,60,110, fp = open(infile, 'r') for line in fp: tokens = line.split() exonstarts = tokens[8][:-1].split(',') exonends = tokens[9][:-1].split(',') zipped = list(zip(exonstarts,
NM_???? chr12 - 10 110 10 110 3 10,50,100, 20,60,110,
fp = open(infile, 'r')
for line in fp:
tokens = line.split()
exonstarts = tokens[8][:-1].split(',')
exonends = tokens[9][:-1].split(',')
zipped = list(zip(exonstarts, exonends))
我对最后两列感兴趣,第一列是逗号分隔的外显子列表,最后一列是逗号分隔的外显子列表
尽管如此,我已经做了以下工作:
NM_???? chr12 - 10 110 10 110 3 10,50,100, 20,60,110,
fp = open(infile, 'r')
for line in fp:
tokens = line.split()
exonstarts = tokens[8][:-1].split(',')
exonends = tokens[9][:-1].split(',')
zipped = list(zip(exonstarts, exonends))
现在我有了一个如下所示的列表:
[(10, 20), (50, 60), (100, 110)]
我还有一个问题,我有一个刺,我想要这些碎片。比如说,我想知道有没有一种方法可以让我轻松地说出来呢?我认为最具python风格的说法是:
''.join(chr_string[a[0]:a[1]] for a in myList)
我认为最具python风格的说法是:
''.join(chr_string[a[0]:a[1]] for a in myList)
要通过使用这些对切片
chr_string
(我已经制作)来获得列表
:
>>> [chr_string[start:end + 1] for start,end in zip(exonstarts, exonends)]
['05060708091', '25262728293', '50515253545']
要将这些结合在一起:
>>> ''.join(chr_string[start:end + 1] for start,end in zip(exonstarts, exonends))
'050607080912526272829350515253545'
要通过使用这些对切片
chr_string
(我已经制作)来获得列表
:
>>> [chr_string[start:end + 1] for start,end in zip(exonstarts, exonends)]
['05060708091', '25262728293', '50515253545']
要将这些结合在一起:
>>> ''.join(chr_string[start:end + 1] for start,end in zip(exonstarts, exonends))
'050607080912526272829350515253545'
对,但是因为我事先不知道列表中有多少元素。你的代码行只允许两个元素,有没有办法这么说?@PatrickCampbell-Ken的列表将说明列表中的每个元素。在每个元组中有两个以上的元素是没有意义的。这样更好:
'.join(chr_string[start:end]表示开始,在myList中结束)
a[0]
和a[1]
是要从chr_string
中提取的字符的起始值和结束值myList
将是包含这些值元组的列表(如[(10,20)、(50,60)、(100,110)]
),可以任意长。谢谢,这太棒了。一如既往地乐于助人!对,但是因为我事先不知道列表中有多少元素。你的代码行只允许两个元素,有没有办法这么说?@PatrickCampbell-Ken的列表将说明列表中的每个元素。在每个元组中有两个以上的元素是没有意义的。这样更好:'.join(chr_string[start:end]表示开始,在myList中结束)
a[0]
和a[1]
是要从chr_string
中提取的字符的起始值和结束值myList
将是包含这些值元组的列表(如[(10,20)、(50,60)、(100,110)]
),可以任意长。谢谢,这太棒了。一如既往地乐于助人!您想要[10:20]
还是[10:21]
。切片上的停止索引是非包容性的。如果您是正确的,我希望[10:21]可能是您想要的[10:20]
或[10:21]
的副本。切片上的停止索引是非包容性的。你是对的,我想要[10:21]Joel的可能副本,你在过去一周帮了我这么多。我还有一个问题要问你,然后这个程序应该是功能齐全的。还有你帮我回答的宝贵问题。我需要从染色体的长度中减去每个外显子以得到新的开始,然后从染色体的长度中减去外显子以得到新的结束。然而,我需要再次对每个元素执行此操作,如上所述。有没有办法做到这一点?这涉及到字典和我说的代码行:'.join(bc[base.upper()]for base in chr_string[newstart:newend])@PatrickCampbell:你能给我举个例子吗?最好少于20个字符。@PatrickCampbell:这听起来像是又一个新问题。请阅读一些提示,以获得您第一次寻找的答案!嗯。。。这必须与我在上一个问题中所做的相反的恭维相配合。所以我想从字符串中减去每个exonends(这将给我一个位置,我称之为newstart),然后从字符串中减去每个exonenstart,得到我称之为newend的位置。我想从newstart得到同样的东西:newend。对于每个数字,将它们相加。因此,它与上面的类型相同,但在字符串上的位置不同。我只需要用类似的方式来做,但想不出容易的办法。乔尔,你在过去的一周里帮了我很多。我还有一个问题要问你,然后这个程序应该是功能齐全的。还有你帮我回答的宝贵问题。我需要从染色体的长度中减去每个外显子以得到新的开始,然后从染色体的长度中减去外显子以得到新的结束。然而,我需要再次对每个元素执行此操作,如上所述。有没有办法做到这一点?这涉及到字典和我说的代码行:'.join(bc[base.upper()]for base in chr_string[newstart:newend])@PatrickCampbell:你能给我举个例子吗?最好少于20个字符。@PatrickCampbell:这听起来像是又一个新问题。请阅读一些提示,以获得您第一次寻找的答案!嗯。。。这必须与我在上一个问题中所做的相反的恭维相配合。所以我想从字符串中减去每个exonends(这将给我一个位置,我称之为newstart),然后从字符串中减去每个exonenstart,得到我称之为newend的位置。我想从newstart得到同样的东西:newend。对于每个数字,将它们相加。因此,它与上面的类型相同,但在字符串上的位置不同。我只需要用类似的方法来做,但不能想出简单的办法