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
。
答案 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}}