2012-01-11 8 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行目は「最初の行を残して次の残りの行に参加する」ことを意味します。 私はこれらの2つの行の論理を得ることができません。 誰も私にこの2つのスライス演算子([0] [1:])を一緒に使用する方法を説明できますか? ありがとうsplitコマンドでsliceコマンドを使用していますか?

編集は:dataに(あまりにも、キーワードである)file変数の名前を変更しました。

+4

変数としてファイルを使用しないでください。これは組み込み関数の名前です。 –

+0

よろしくお願いいたします。忘れてた。 – user1144004

+0

謝罪しないでください。あなたのサンプルコードを修正してください。 –

答えて

4

このように考えると、file.split('\n')はあなたに文字列のリストを与えます。したがって、最初のインデックス作成操作[0]は、リストの最初の文字列を返します。さて、文字列そのものは文字の「リスト」なので、[1:]を実行して最初の文字の後にすべての文字を取得することができます。 2次元のリスト(リストのリスト)から始め、それを2回インデックスするのと同じです。

+0

最初の角括弧はスライス操作ではなく、インデックス作成操作です。スライス操作の場合は、コロンが必要です(例:[:])。 –

4

複雑な表現で混乱すると、それを実行します。

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

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

これは役立つはずです。

+1

初心者のための良いヒント、はい。 –

+0

これはコード内で何が起こっているかを見るために私が毎日使っている手法です。私は専門家にとっても初心者にとっても価値があると思います。 –

+0

はい。その専門家だけがそれを知っていますが、初心者にはそれを忘れてしまいます。なぜなら、それはあまりにも些細なことだからです。 –

0

[]の各セットは、splitが返すリスト上で動作し、その結果得られた リストまたは文字列は、最初に別の変数に代入されることなく使用されます。私は名前とseqが何であるかを知っていると思う

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

(ステップによってそれを行うことができます:

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

このような第四行打破:このようなサードラインダウン

ブレーク):

>>> 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は含まれません。あなたがリストの最後に到着したい場合は、単にYを示すものではありません - > [X:]

0

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

ので、ここでは一例としてこれを取る(インデックスの項目から終わりまでのx) mylはlist of listです。したがって、myl[0]['hello', 'world', 'of', 'python']に等しいリストの最初の要素を意味しますが、myl[0][1:]を使用すると、myl[0]で表され、結果リスト(myl [0])よりも最初の要素を選択することを意味します。 [0] [1:])。したがって、出力= ['world', 'of', 'python']

関連する問題