環境:Python3.7
in演算子を使用して値が含まれているか判定しようとすると以下のエラーが返されて
TypeError: argument of type 'int' is not iterable
TypeError: ‘int’型の引数は反復可能ではありませんと怒られてしまった。
そこで色々試してみた結果を記載しておきます。
in演算子を使用して値が入っているか判定
まず、結論からin演算子を使用して判定可能なのは以下の通りでした。
・str型⇔str型
・int型→list型を参照して判定
・int型→tuple型を参照して判定
変数を使って値が入っているか判定する
str型とstr型で判定する
bの変数がaの変数に入っているか判定する
a = '1234' b = '1' print(a,type(a)) print(b,type(b)) if b in a: print('yes') else: print('no')
結果
1234 <class 'str'> 1 <class 'str'> yes
aからbの変数に入っているか判定してもnoが返されたのでOK
a = '1234' b = '1' print(a,type(a)) print(b,type(b)) if a in b: print('yes') else: print('no')
結果はnoが返される。
1234 <class 'str'> 1 <class 'str'> no
int型とlist型で判定する
int型bの値からlist型aに入っているか判定する
a = [1, 2, 3, 4] #変数aに123の値を代入 b = 1 #変数bに1を代入 print(a,type(a)) print(b,type(b)) if b in a: print('yes') else: print('no')
結果
[1, 2, 3, 4] <class 'list'> 1 <class 'int'> yes
list型からint型はエラーが返される
a = [1,2,3,4] b = 1 print(a,type(a)) print(b,type(b)) if a in b: print('yes') else: print('no')
結果
[1, 2, 3, 4] <class 'list'> 1 <class 'int'> Traceback (most recent call last): File "C:/Users/chiraura/PycharmProjects/untitled1/Python_test.py", line 7, in if a in b: TypeError: argument of type 'int' is not iterable
int型とtuple型で判定する
int型bの値からtuple型aの値を判定する
a = (1,2,3,4) b = 1 print(a,type(a)) print(b,type(b)) if b in a: print('yes') else: print('no')
結果
(1, 2, 3, 4) <class 'tuple'> 1 <class 'int'> yes
tuple型aの値からint型bの値を判定する
a = (1,2,3,4) b = 1 print(a,type(a)) print(b,type(b)) if a in b: print('yes') else: print('no')
結果はエラーが返される
(1, 2, 3, 4) <class 'tuple'> 1 <class 'int'> Traceback (most recent call last): File "C:/Users/chiraura/PycharmProjects/untitled1/Python_test.py", line 7, in if a in b: TypeError: argument of type 'int' is not iterable
解決方法は型変換
先ほどエラーが返されたlist型とint型を確実に判定可能だったstr型に変換してみる
a = [1, 2, 3, 4] b = 1 print(a,type(a)) print(b,type(b)) new_a = str(a) new_b = str(b) print(new_a,type(new_a)) print(new_b,type(new_b)) if new_a in new_b: print('yes') else: print('no')
結果【list型とint型】から【str型】へ変換されて結果が返されたのが確認できた。
[1, 2, 3, 4] <class 'list'> 1 <class 'int'> [1, 2, 3, 4] <class 'str'> 1 <class 'str'> no
コメント