2012-01-11 90 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']