使用split命令和split命令?

时间:2012-01-11 19:58:46

标签: python split slice

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:])是如何一起使用的? 感谢名单

已修改:将file变量(也是关键字)重命名为data

5 个答案:

答案 0 :(得分:4)

可以这样想:file.split('\n')为您提供字符串列表。因此,第一个索引操作[0]为您提供列表中的第一个字符串。现在,该字符串本身就是一个"列表"然后你可以[1:]来获得第一个字符。它就像从二维列表(列表列表)开始并将其索引两次一样。

答案 1 :(得分:4)

当被复杂表达混淆时,请按步骤进行操作。

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

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

这应该有所帮助。

答案 2 :(得分: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'
>>>  
在切片[x:y]中的

,包括x,不包括y。如果您想要到达列表末尾,请不要指明y - &gt; [x:](从索引x到结尾的项目)

答案 3 :(得分: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)

答案 4 :(得分:0)

以此为例

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

所以这里的myl是list of list。因此,myl[0]表示列表的第一个元素等于['hello', 'world', 'of', 'python']但是当您使用myl[0][1:]时,它意味着从列表中选择第一个元素,该元素由myl[0]表示,而不是从['world', 'of', 'python']表示结果列表(myl [0])选择除第一个之外的所有元素(myl [0] [1:])。所以output = {{1}}