根据另一个列表切片列表

时间:2019-08-30 13:37:24

标签: python-3.x

我需要切片核苷酸序列列表,例如。 [“ ATGCTGACTGCA”,“ ATGCAGGCGTAG”]根据另外两个列表,一个带有起始密码子,另一个带有终止密码子。

我将所有数据都存储在pandas数据框中,并将其提取到用于序列的np数组中,并将其提取到用于开始和停止的两个列表中。我已经尝试过列表理解:

seq = ["ATGCTGACTGCA", "ATGCAGGCGTAG"]
start = [1, 4]
stop = [6, 12]

[sublist[x:y] for x in start for y in stop for sublist in seq]

我想这会关联所需序列的开始和结束并对片段进行切片,但是结果是一个组合(新列表有8个条目) 我在做什么错了?

2 个答案:

答案 0 :(得分:1)

我认为您需要以下两种情况之一:

一个带有zip的嵌套循环,以防您想要获得每个序列的两个子列表:

[sublist[x:y] for x,y in zip(start,stop) for sublist in seq]

具有以下结果:

['TGCTG', 'TGCAG', 'TGACTGCA', 'AGGCGTAG']

或仅包含所有内容的zip:

[sublist[x:y] for x,y,sublist in zip(start,stop,seq)]

获得以下结果:

['TGCTG', 'AGGCGTAG']

答案 1 :(得分:0)

我认为您希望使用zip而不是嵌套循环。

>>> [s[x:y] for x, y in zip(start, stop) for s in seq]
['TGCTG', 'TGCAG', 'TGACTGCA', 'AGGCGTAG']