1

タブ区切りのファイルを開き、行ごとに要素をリストに分割しています。リスト list[0] の最初の要素にアクセスできますが、後続の要素にアクセスしようとすると機能しません。

各行の最初の要素を返すコード.これは期待どおりに機能します

with open(fileX) as GFF_in:

   for line in GFF_in:

       list = line.split('\t')

print list[0]

しかし、他の6つの要素のいずれかにアクセスしようとしています;

>>>print list[1] #2nd element

>>>print list[4] #5th element

エラー「IndexError: list index out of range」をスローします

これは非常に基本的なコードです...なぜこれが機能しないのか理解できません!!? リストにアイテムを手動で割り当てて印刷するのと同じです。

>>> food = 'bread', 'chicken', 'the_other_white_meat'

>>> print food[2]

>>> the_other_white_meat

最初の要素を印刷すると、それは間違いなく各行の最初の項目であり、リスト全体を印刷すると、すべての要素が各行にあります...何年もこれに固執しています:/

ありがとう

マット。

4

2 に答える 2

2

通常の理由は、ファイルが空行で終わっていることです。これを防御するのは簡単です

for line in GFF_in:
    if not line:  # ignore empty lines
        break
    list_without_meaningful_name = line.split('\t')
    ...

また

for line in GFF_in:
    if not line:  # ignore empty lines
        break
    list_without_meaningful_name = line.split('\t')
    if len(list_without_meaningful_name) < 6:
        # uh oh
    ...
于 2013-06-07T05:43:56.787 に答える
0

おそらく、あなたは次のようなことをしたいと思っていました:

>>> food = 'bread', 'chicken', 'the_other_white_meat'
>>> lis = [y for x in food for y in x.split('_')]
>>> lis
['bread', 'chicken', 'the', 'other', 'white', 'meat']
>>> lis[1]
'chicken'
>>> lis[5]
'meat'
于 2013-06-07T05:32:51.670 に答える