2015-03-13 33 views
3

我想從列表中給出的位置分割一個字符串,並將這些部分添加到新列表中。我開始:拆分一個字符串和數字列表

seq = 'ATCGATCGATCG' 
seq_new = [] 
seq_cut = [2, 8 , 10] 

我想獲得:

seq_new = ['AT', 'CGATCG', 'AT', 'CG'] 

名單與位置的大小和值變量。我該如何處理我的數據?

回答

7

使用zip創建索引slicing

seq_new = [seq[start:end] for start, end in zip([None] + seq_cut, seq_cut + [None])] 

這種拉鍊一起[None, 2, 8 , 10][2, 8, 10, None]創建索引[(None, 2), (2, 8), (8, 10), (10, None)]None,因爲第一個索引默認爲零,None,因爲第二個索引默認爲被切片序列的大小。

+1

補充 - 只是要從我的編輯器複製/粘貼幾乎完全一樣:p – 2015-03-13 17:20:24

+1

爲了增加對稱性,你可以在第一個對象上使用'None'(就像我剛剛做的那樣!:P) – DSM 2015-03-13 17:20:55

+0

這可以通過修改版本在[本文](http://stackoverflow.com/a/21303303/4621513)中描述的「配對」配方(作爲練習留給讀者)!得到的表達式是'[seq [start:end]用於開始,以pairwise結尾(seq_cut)]' – mkrieger1 2015-03-13 17:52:43

5

使用切片:

seq = "ATCGATCGATCG" 
seq_new = [] 
seq_cut = [2, 8, 10] 

last = 0 
for idx in seq_cut: 
    seq_new.append(seq[last:idx]) 
    last = idx 
seq_new.append(seq[last:]) 
+0

Python切片語法對於不熟悉它的人來說可能令人望而生畏,但它超級強大(+1)https://docs.python.org/2.3/whatsnew/section-slices.html – TeneCursum 2015-03-13 17:14:36