Pythonのin演算子(int型)で”TypeError: argument of type ‘int’ is not iterable”と怒られてしまった際の解決方法

環境: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

スポンサーリンク
スポンサーリンク
SNSフォローボタン

フォローする

シェアする

  • このエントリーをはてなブックマークに追加
スポンサーリンク
スポンサーリンク