Использование команды среза с командой разделения? - PullRequest
0 голосов
/ 11 января 2012
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 ]

4 голосов
/ 12 января 2012

Если смущено сложным выражением, сделайте это с шагами.

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

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

Это должно помочь.

4 голосов
/ 12 января 2012

Думайте об этом так: file.split('\n') дает вам список строк.Итак, первая операция индексации, [0], дает первую строку в списке.Теперь эта строка представляет собой «список» символов, поэтому вы можете сделать [1:], чтобы получить каждый символ после первого.Это как начать с двухмерного списка (списка списков) и дважды его проиндексировать.

1 голос
/ 12 января 2012

давайте сделаем это пошагово, (я думаю, я знаю, что такое имя и последовательность):

>>> 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 -> [x:] (от элемента индекса x до конца)

0 голосов
/ 12 января 2012

возьмем это в качестве примера

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']

0 голосов
/ 12 января 2012

Каждый набор [] просто оперирует списком, который возвращает 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)
...