2012-01-11 104 views
0
fh=open('asd.txt') 
data=fh.read() 
fh.close() 

name=data.split('\n')[0][1:] 
seq=''.join(data.split('\n')[1:]) 
print name 
print seq 

在此代碼中,第3行意味着「只取第一行刪除第一個字符」,而第4行意味着「保留第一行並加入下一行」。 我無法得到這兩條線的邏輯。 任何人都可以解釋我如何將這兩個切片運算符([0] [1:])一起使用嗎? 感謝名單使用split命令使用slice命令?

被修改:更名file變量(是一個關鍵字,太)到data

+4

不要使用'file'作爲變量。這是一個內置函數的名稱。 – 2012-01-11 20:07:27

+0

ya謝謝。我忘了。 – user1144004 2012-01-11 20:26:04

+0

不要道歉。修復您的示例代碼。 – 2012-01-11 20:27:35

回答

4

認爲它是這樣的:file.split('\n')給你一個字符串列表。因此,第一個索引操作[0]爲您提供了列表中的第一個字符串。現在,該字符串本身就是一個「列表」中的字符,因此您可以在[1:]之後獲取第一個字符。這就像從一個二維列表(一個列表列表)開始並將其索引兩次。

+0

第一組方括號不是分片操作 - 它是一種索引操作。對於切片操作,冒號必須存在(例如[:])。 – 2012-01-14 00:00:33

4

當遇到複雜的表達式時,請按步驟操作。

>>> data.split('\n')[0][1:] 

>>> data 
>>> data.split('\n') 
>>> data.split('\n')[0] 
>>> data.split('\n')[0][1:] 

這應該有所幫助。

+1

適合初學者的提示,是的。 – 2012-01-12 20:07:30

+0

這是我幾乎每天都用來看代碼中發生了什麼的技術。我認爲它對專家和初學者都有價值。 – 2012-01-12 20:26:26

+0

是的。只是專家們都會知道,但忘了給初學者解釋一下,因爲這對他們來說太小了...... – 2012-01-12 20:30:58

0

每組[]都在split返回的列表上運行,然後使用得到的 列表或字符串,而不先將其分配給另一個變量。

分解第三行是這樣的:

lines = file.split('\n') 
first_line = lines[0] 
name = first_line[1:] 

打破第四行是這樣的:

lines = file.split('\n') 
all_but_first_line = lines[1:] 
seq = ''.join(all_but_first_line) 
1

可以通過以下步驟做到這一點,(我想我知道什麼名字,並且seq是):

>>> file = ">Protein kinase\nADVTDADTSCVIN\nASHRGDTYERPLK" <- that's what you get reading your (fasta) file 
>>> lines = file.split('\n')   <- make a list of lines 
>>> line_0 = lines[0]     <- take first line (line numbers start at 0) 
>>> name = line_0[1:]     <- give me line items [x:y] (from x to y) 
>>> name 
'Protein kinase' 
>>> 
>>> file = ">Protein kinase\nADVTDADTSCVIN\nASHRGDTYERPLK" 
>>> lines = file.split('\n') 
>>> seqs = lines[1:]     <- gime lines [x:y] (from x to y) 
>>> seq = ''.join(seqs) 
>>> seq 
'ADVTDADTSCVINASHRGDTYERPLK' 
>>> 

in slice [x:y],包含x,不包括y。當你想到達列表的末尾只是不表明Ÿ - > [X:](從指數的X項爲末)

0

以此爲例子

myl = [["hello","world","of","python"],["python","is","good"]] 

所以在這裏myl是list of list。因此,myl[0]意味着列表的第一個元素等於['hello', 'world', 'of', 'python'],但是當您使用myl[0][1:]時,它意味着從myl[0]表示的列表中選擇第一個元素,然後從結果列表(myl [0])中選擇除第一個元素(myl [0] [1:])。所以輸出= ['world', 'of', 'python']