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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1552閲覧

Pythonのエラー is not in list の対処

mah3

総合スコア17

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/01 01:57

編集2022/01/12 10:55

前回こちらで回答して頂いた https://teratail.com/questions/165782 コードを追記して、動かしてみました。
その処理自体はうまく行ったのですがその後の段階で「is not in list」というエラーが発生しました。

おそらくスキップ処理後リストに格納する段階で不具合があったのではないかと…

宜しくお願い致します。

エラーが出たコードがこちらになります。

Python

1file = open('test.txt','r') 2string = file.readline() 3 4while string: 5 is_skip = False 6 7 if 'ANISOU' in string: # ANISOUを含む 8 #if string.startswith('ANISOU'): # ANISOUで始まる 9 is_skip = True 10 11 12 if not is_skip: 13 print(string.rstrip()) 14 string = file.readline() 15 16 17 18x = [0]*10000 19y = [0]*10000 20z = [0]*10000 21array_number = [0]*10000 #配列番号 22tag = [0]*10000 #物質名 23atom = [0]*10000 #原子名 24chain = [0]*10000 #鎖 25 26#最初の読み込み------------------------------------ 27cnt = 0 28while string: 29 cnt = int(string[6:11],10) 30 if string[36] == ' ': 31 string = file.readline() 32 continue 33 34 x[cnt] = float(string[31:38]) 35 y[cnt] = float(string[39:46]) 36 z[cnt] = float(string[47:54]) 37 array_number[cnt] = float(string[22:26]) 38 tag[cnt] = string[17:20] 39 atom[cnt] = string[13:16] 40 chain[cnt] = string[21] 41 42 string = file.readline() 43 44print('READ FINISH.'); #読み込み完成すると表示 45 46#input_intron---------------------------------------- 47 48print('intronの数は?') 49intron_kazu = int(input()) #intron個数 50 51x_intron = []*(intron_kazu) 52y_intron = []*(intron_kazu) 53z_intron = []*(intron_kazu) 54list_intron = [] #intronの通しナンバー 55 56print('intron位置を全て入力して') 57print('例:入力➡ENTER➡入力➡ENTERの繰り返し') 58for i in range(intron_kazu): 59 60 intron_number = int(input()) #intronの残基番号を入力 61 list_intron.append(intron_number) 62 63 index = array_number.index(intron_number) #intorn分子の最初の通しナンバー 64 count = array_number.count(intron_number) #intron分子を構成する原子数 65 intron_finish = index + count #(intron原子の最後の通しナンバー + 1) 66 67

元のテキストファイルがこちらになります

ATOM 1 N ALA A 9 -10.745 32.779 -2.046 1.00 61.24 N

ANISOU 1 N ALA A 9 7527 8194 7549 2491 121 -1211 N
ATOM 2 CA ALA A 9 -9.707 33.771 -2.328 1.00 60.43 C
ANISOU 2 CA ALA A 9 7556 8106 7300 2484 202 -1169 C
ATOM 3 C ALA A 9 -8.532 33.739 -1.303 1.00 61.21 C
ANISOU 3 C ALA A 9 7589 8327 7340 2293 284 -1015 C
ATOM 4 O ALA A 9 -8.683 33.287 -0.159 1.00 57.06 O
ANISOU 4 O ALA A 9 6940 7894 6849 2153 299 -972 O
ATOM 5 CB ALA A 9 -10.311 35.169 -2.384 1.00 61.35 C
ANISOU 5 CB ALA A 9 7779 8192 7338 2507 226 -1295 C
ATOM 6 N TYR A 10 -7.370 34.249 -1.756 1.00 58.26 N
ANISOU 6 N TYR A 10 7304 7947 6887 2302 335 -930 N
ATOM 7 CA TYR A 10 -6.099 34.359 -1.034 1.00 58.08 C
ANISOU 7 CA TYR A 10 7243 8003 6822 2150 400 -787 C
ATOM 8 C TYR A 10 -6.143 35.449 0.019 1.00 67.00 C
ANISOU 8 C TYR A 10 8380 9178 7900 2016 432 -811 C
ATOM 9 O TYR A 10 -5.993 35.148 1.206 1.00 66.49 O
ANISOU 9 O TYR A 10 8226 9198 7839 1881 443 -770 O
ATOM 10 CB TYR A 10 -4.965 34.694 -2.018 1.00 57.22 C
ANISOU 10 CB TYR A 10 7222 7854 6665 2231 444 -687 C
ATOM 11 CG TYR A 10 -4.674 33.623 -3.042 1.00 55.74 C
ANISOU 11 CG TYR A 10 7039 7641 6497 2392 410 -644 C
ATOM 12 CD1 TYR A 10 -5.589 33.329 -4.050 1.00 57.18 C
ANISOU 12 CD1 TYR A 10 7290 7737 6700 2599 335 -758 C

そしてスキップ処理してPython に表示されたのがこちらです。

ATOM 1 N ALA A 9 -10.745 32.779 -2.046 1.00 61.24 N

ATOM 2 CA ALA A 9 -9.707 33.771 -2.328 1.00 60.43 C
ATOM 3 C ALA A 9 -8.532 33.739 -1.303 1.00 61.21 C
ATOM 4 O ALA A 9 -8.683 33.287 -0.159 1.00 57.06 O
ATOM 5 CB ALA A 9 -10.311 35.169 -2.384 1.00 61.35 C
ATOM 6 N TYR A 10 -7.370 34.249 -1.756 1.00 58.26 N
ATOM 7 CA TYR A 10 -6.099 34.359 -1.034 1.00 58.08 C
ATOM 8 C TYR A 10 -6.143 35.449 0.019 1.00 67.00 C
ATOM 9 O TYR A 10 -5.993 35.148 1.206 1.00 66.49 O
ATOM 10 CB TYR A 10 -4.965 34.694 -2.018 1.00 57.22 C
ATOM 11 CG TYR A 10 -4.674 33.623 -3.042 1.00 55.74 C
ATOM 12 CD1 TYR A 10 -5.589 33.329 -4.050 1.00 57.18 C
ATOM 13 CD2 TYR A 10 -3.436 32.994 -3.083 1.00 54.91 C
ATOM 14 CE1 TYR A 10 -5.317 32.361 -5.013 1.00 53.48 C
ATOM 15 CE2 TYR A 10 -3.147 32.033 -4.048 1.00 54.87 C
ATOM 16 CZ TYR A 10 -4.096 31.713 -5.006 1.00 55.01 C
ATOM 17 OH TYR A 10 -3.855 30.748 -5.947 1.00 42.22 O
ATOM 18 N ALA A 11 -6.341 36.729 -0.438 1.00 66.89 N
ATOM 19 CA ALA A 11 -6.371 38.001 0.307 1.00 67.92 C
ATOM 20 C ALA A 11 -7.005 37.876 1.678 1.00 72.70 C
ATOM 21 O ALA A 11 -6.570 38.550 2.621 1.00 74.55 O
ATOM 22 CB ALA A 11 -7.114 39.055 -0.498 1.00 69.00 C
ATOM 23 N GLN A 12 -8.038 37.023 1.784 1.00 67.03 N
ATOM 24 CA GLN A 12 -8.740 36.734 3.030 1.00 66.02 C
ATOM 25 C GLN A 12 -7.944 35.739 3.897 1.00 64.78 C
ATOM 26 O GLN A 12 -7.729 35.980 5.091 1.00 65.92 O
ATOM 27 CB GLN A 12 -10.134 36.167 2.718 1.00 67.75 C
ATOM 28 N GLU A 13 -7.503 34.627 3.286 1.00 56.75 N
ATOM 29 CA GLU A 13 -6.809 33.555 3.988 1.00 53.08 C
ATOM 30 C GLU A 13 -5.357 33.865 4.378 1.00 45.98 C
ATOM 31 O GLU A 13 -4.805 33.048 5.098 1.00 43.30 O
ATOM 32 CB GLU A 13 -6.860 32.263 3.161 1.00 54.87 C
ATOM 33 N LYS A 14 -4.742 35.018 3.973 1.00 38.34 N
ATOM 34 CA ALYS A 14 -3.341 35.298 4.317 0.50 37.05 C


(約3000行)

エラーメッセージがこちらです。

Traceback (most recent call last):

File "C:\Users\sakura\Desktop\python 1031\1行飛ばしテスト.py", line 70, in <module>
index = array_number.index(intron_number) #intorn分子の最初の通しナンバー
ValueError: 47 is not in list

ちなみにスキップ処理するコードを入れる前の、エラーが発生しなかったコードがこちらになります。

Python

1file = open('test2.txt','r') #ファイルを変えるときはここを変える 2string = file.readline() 3string = file.readline() 4 5x = [0]*10000 6y = [0]*10000 7z = [0]*10000 8array_number = [0]*10000 #配列番号 9tag = [0]*10000 #物質名 10atom = [0]*10000 #原子名 11chain = [0]*10000 #鎖 12 13#最初の読み込み------------------------------------ 14cnt = 0 15while string: 16 cnt = int(string[6:11],10) 17 if string[36] == ' ': 18 string = file.readline() 19 continue 20 21 x[cnt] = float(string[31:38]) 22 y[cnt] = float(string[39:46]) 23 z[cnt] = float(string[47:54]) 24 array_number[cnt] = float(string[22:26]) 25 tag[cnt] = string[17:20] 26 atom[cnt] = string[13:16] 27 chain[cnt] = string[21] 28 29 string = file.readline() 30 31print('READ FINISH.'); #読み込み完成すると表示 32 33#input_intron---------------------------------------- 34 35print('intronの数は?') 36intron_kazu = int(input()) #intron個数 37 38x_intron = []*(intron_kazu) 39y_intron = []*(intron_kazu) 40z_intron = []*(intron_kazu) 41list_intron = [] #intronの通しナンバー 42 43print('intron位置を全て入力して') 44print('例:入力➡ENTER➡入力➡ENTERの繰り返し') 45for i in range(intron_kazu): 46 47 intron_number = int(input()) #intronの残基番号を入力 48 list_intron.append(intron_number) 49 50 index = array_number.index(intron_number) #intorn分子の最初の通しナンバー 51 count = array_number.count(intron_number) #intron分子を構成する原子数 52 intron_finish = index + count #(intron原子の最後の通しナンバー + 1) 53 54

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2019/02/01 02:15

エラーが再現する最小限のtest.txtデータ(数行程度)とプログラム上での実行手順(intronの数などを入力?)を提示ください。 さらに、どこでエラーが発生したか分からないのでエラーのTraceback全文を追記ください。
mah3

2019/02/01 02:18

わかりました。 追記します!
guest

回答1

0

プログラムが何をやっているのかは把握していませんが、処理の流れを追ってみました。

最初のwhile string:ループの後、stringつねに空文字になります。(じゃないとwhileループを抜けないように書いてある)
すると最初の読み込みループは1回も処理されずarray_numberは初期化された状態(すべて0)のままになります。
よって、その後のfor i in range(intron_kazu):ループ中のindex = array_number.index(intron_number)において、intron_numberが0以外だとその数値が見つからず提示エラーが発生します。

なお、どのように修正すべきかは、プログラムの内容を把握している質問者様本人のみしか分からないかと思います。
(少なくとも私には分かりません)

補足

最初のループの以下では「スキップしないとき」の判定処理が書かれていますが、ここに何らか必要な処理(読込?)を書くべきのような気がします。

Python

1if not is_skip: 2 print(string.rstrip()) # プリントするだけ?

投稿2019/02/01 02:35

編集2019/02/01 02:44
can110

総合スコア38234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問