質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

Pythonのエラー ValueError: is not in list

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 4,592

score 17

以前こちらで回答して頂いた(https://teratail.com/questions/165782)コードを組み込んで動かしてみると、今まで出なかった

index = array_number.index(intron_number)   #intorn分子の最初の通しナンバー
ValueError: 47 is not in list

というエラーが出てしまいました...

47というのが以下のコード中のintron位置になります。
コードの初めにある部分が先ほどの教えていただいたところです。
そこで処理された4nua.txtには47も存在しています

宜しくお願い致します。

file = open('4nua.txt','r')
string = file.readline()

while string:
    is_skip = False

    if 'ANISOU' in string:           # ANISOUを含む
    #if string.startswith('ANISOU'): # ANISOUで始まる
        is_skip = True

    #if string[36] == ' ':
    #    is_skip = True
    if not is_skip:
        print(string.rstrip())

    string = file.readline()

x = [0]*10000
y = [0]*10000
z = [0]*10000       
array_number = [0]*10000    #配列番号
tag = [0]*10000     #物質名
atom = [0]*10000    #原子名
chain = [0]*10000   #鎖

#最初の読み込み------------------------------------
cnt = 0
while string:
    cnt = int(string[6:11],10)
    if string[36] == ' ':
        string = file.readline()
        continue

    x[cnt] = float(string[31:38])
    y[cnt] = float(string[39:46])
    z[cnt] = float(string[47:54])
    array_number[cnt] = float(string[22:26])
    tag[cnt] = string[17:20]
    atom[cnt] = string[13:16]   
    chain[cnt] = string[21]

    string = file.readline()

print('READ FINISH.');      #読み込み完成すると表示

#input_intron----------------------------------------

print('intronの数は?')
intron_kazu = int(input())      #intron個数

x_intron = []*(intron_kazu)
y_intron = []*(intron_kazu)
z_intron = []*(intron_kazu)
list_intron = []    #intronの通しナンバー

print('intron位置を全て入力して')
print('例:入力➡ENTER➡入力➡ENTERの繰り返し')
for i in range(intron_kazu):

    intron_number = int(input())    #intronの残基番号を入力
    list_intron.append(intron_number)

    index = array_number.index(intron_number)   #intorn分子の最初の通しナンバー
    count = array_number.count(intron_number)   #intron分子を構成する原子数
    intron_finish = index + count               #(intron原子の最後の通しナンバー + 1)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

[].index(1)


でも同様の下記のエラーが出ます

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    [].index(1)
ValueError: 1 is not in list


つまり、array_numberの中に47という値が入っていないことになります

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/22 15:48

    ご回答ありがとうございます。
    なるほど...
    また考えてみます!
    ありがとうございました!

    キャンセル

+1

readline()がイテレータであることが分かれば一歩進めそうな気がしました。

今回の場合、readline()は、「ファイル(今回の場合、file)を読み込み次の行に移動する」という性質を持っています。
何が言いたいかコメントで書いたので確認していただければと。(うるさくて申し訳ないです)

file = open('4nua.txt','r')
string = file.readline()

while string:

    色々と処理

    string = file.readline()

# 上記のwhile文を抜けた時点でファイルの読み込みは終了している!!
色々と初期化

#最初の読み込み------------------------------------
# ファイルの読み込みは終了してしまってるので、この下のwhile文には入ってきていない!!(気がします)
cnt = 0
while string:

    色々と処理

    string = file.readline()

# 2つ目のwhile文では何もしていないまま・・・!!
print('READ FINISH.');      #読み込み完成すると表示

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/22 15:48

    ご回答ありがとうございます。
    細かく書いていただきありがとうございます!!!
    こちらを参考にして考えてみます。
    ありがとうございました!

    キャンセル

  • 2019/01/22 15:54

    頑張ってください!(これは余談ですが、「pandasというライブラリを用いる」もしくは、「split()という関数を使う」で、もう少し簡単にいくかも?という気もしました。余裕があればご検討ください)

    キャンセル

0

当てずっぽうですが、ANISOU までは必要なデータ以外の行だと仮定します。
そうすると、

while string:
    is_skip = False

    if 'ANISOU' in string:           # ANISOUを含む
    #if string.startswith('ANISOU'): # ANISOUで始まる
        is_skip = True

    #if string[36] == ' ':
    #    is_skip = True
    if not is_skip:
        print(string.rstrip())

    string = file.readline()


while 'ANISOU' not in string:
    print(string.rstrip())
    string = file.readline()


に変えると、どうでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る