・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2024年04月03日に投稿されました。)
Pythonでリスト(List)や文字列の値を確認するにはin演算子使用します。
in演算子とは、オブジェクトに特定の値が存在するどうかを確認/判定する演算子になります。
そのため、リスト(List)や文字列に対して使用すると特定の要素や文字が存在するか確認することができます。
そして、in演算子は存在する場合はTrueを、存在しない場合はFalseを返すため、条件処理の際に利用すると便利です。
また、Pythonにはリスト(List)や文字列の値を確認する関数がいくつかありますが、値が確認できなかった場合に処理が落ちてしまう関数も存在します。
それに比べてinはTrueかFalseのどちらかを返す便利な演算子であるためもし、リスト(List)や文字列内に値があるか確認したい場合はin演算子を使用するようにしましょう。
今回はPythonのin演算子でリスト(List)や文字列に値が存在するか確認する方法について紹介していきます。
リスト(List)に指定した要素が格納されているかどうか調べたい場合
文字列に指定した文字が存在するかどうか調べたい場合
in演算子とは
in演算子とは、オブジェクトに特定の値が存在するどうかを確認/判定することができる演算子になります。
特定の値が存在する場合はTrueを、存在しない場合はFalseを返します。
in演算子の書き方
in演算子の書き方は下記のようになります。
1 | 特定の値 in オブジェクト |
特定の値の後ろにinと追記し、その後ろにオブジェクトを追記することで使用することができます。
in演算子の返り値
in演算子の返り値はTrueかFalseの真偽値となります。
in演算子でリスト(List)や文字列に値が存在するか判定するサンプルコード
in演算子でリスト(List)や文字列に値が存在するか判定するサンプルコードをご紹介します。
ここでは下記の2パターンに対して使用します。
- リスト(List)の場合
- 文字列の場合
リスト(List)の場合
リスト(List)に対してin演算子を使用します。
リスト(List)の場合は指定した値が要素として存在するかどうかを確認し、存在する場合は「True」を、存在しない場合は「False」を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● in演算子使用後-1") listIn1 = 'Python' in list1 print(listIn1) print('● in演算子使用後-2') listIn2 = 'VBA' in list1 print(listIn2) |
実行結果
in演算子でリスト(List)に値が存在するか確認しています。
Pythonはリスト内に存在するため、Trueが表示されています。
また、「VBA」はリスト内に存在しないため、Falseが表示されています。
文字列の場合
in演算子を文字列に対して使用します。
文字列の場合は指定した値が文字として存在するかどうかを確認し、存在する場合は「True」を、存在しない場合は「False」を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● in演算子使用後-1") textIn1 = 'Python' in text1 print(textIn1) print("● in演算子使用後-2") textIn2 = 'Java' in text1 print(textIn2) |
実行結果
in演算子で文字列に値が存在するか確認しています。
「Python」は文字列内に存在するため「True」が表示されています。
また、「Java」は文字列内に存在しないため、「False」が表示されています。
in演算子でリスト(List)や文字列に複数の値が存在するか確認する場合
in演算子でリスト(List)や文字列に複数の値が存在するか確認するには、繰り返し処理を使用します。
確認したい値をリストの要素に格納し、それらに対して繰り返し処理を行うことで複数の値の存在を確認することができます。
● main.py
1 2 3 4 5 6 7 8 9 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● in演算子使用後") in_list1 = ['JavaScript', 'Swift', 'C'] for in_item in in_list1: list1_in1 = in_item in list1 print(in_item + ': ' + str(list1_in1)) |
実行結果
繰り返し処理とin演算子でリストに複数の値が存在するか確認しています。
そのため、下記のような結果が表示されています。
- 「JavaScript」はリスト(List)に存在するため「True」
- 「Swift」はリスト(List)に存在しないため「False」
- 「C」はリスト(List)に存在しないため「False」
● main.py
1 2 3 4 5 6 7 8 9 | print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● in演算子使用後") in_list2 = ['Python', 'あたい', 'in'] for in_item in in_list2: text1_in1 = in_item in text1 print(in_item + ': ' + str(text1_in1)) |
実行結果
繰り返し処理とin演算子で文字列に複数の値が存在するか確認しています。
そのため、下記のような結果が表示されています。
- 「Python」は文字列に存在するため「True」
- 「あたい」は文字列に存在しないため「False」
- 「in」は文字列に存在するため「True」
論理演算子を使用してin演算子でリスト(List)や文字列に値が存在するか確認する場合
in演算子は他の論理演算子組み合わせることで、様々な条件としてリスト(List)や文字列に値が存在するかを確認することができます。
そのため、ここでは下記の論理演算子とin演算子を組みあわせた方法についてご紹介します。
- and演算子(論理和)
- or演算(論理積)
- not演算子(否定)
and演算子(論理和)
まずは、and演算子と組みあわせて使用します。
and演算子とは、すべて真なら真でそれ以外は偽と判断する演算子となります。
そのためin演算子と組み合わせると、複数の値が全て含まれる場合のみ「True」が返され、それ以外は「False」が返されます。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● in演算子使用後-1") list1_in1 = "JavaScript" in list1 and "Java" in list1 print(list1_in1) print('● in演算子使用後-2') list1_in2 = "JavaScript" in list1 and "Swift" in list1 print(list1_in2) |
実行結果
and演算子でリスト(List)に値が存在するか確認しています。
「JavaScript」と「Java」はどちらもリスト内に存在するため「True」が表示されています。
また、「JavaScript」はリスト内に存在しますが、「Swift」はリスト内に存在しないため、「False」が表示されています。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● in演算子使用後-1") text1_in1 = "Python" in text1 and "確認" in text1 print(text1_in1) print('● in演算子使用後-2') text1_in2 = "Python" in text1 and "かくにん" in text1 print(text1_in2) |
実行結果
and演算子で文字列に値が存在するか確認しています。
「Python」と「確認」はどちらも文字列内に存在するため「True」が表示されています。
また、「Python」はリスト内に存在しますが、「かくにん」は文字列内に存在しないため、「False」が表示されています。
or演算(論理積)
2つ目はor演算子と組みあわせて使用します。
or演算子とは、どれか1つでも真であるなら真、それ以外は偽と判断する演算子となります。
そのためin演算子と組み合わせると、指定した値のうちどれか1つでも存在していると「True」を返し、それ以外は「False」を返すようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● in演算子使用後-1") list1_in1 = "JavaScript" in list1 or "C" in list1 print(list1_in1) print('● in演算子使用後-2') list1_in2 = "Perl" in list1 or "Swift" in list1 print(list1_in2) |
実行結果
or演算子でリスト(List)に値が存在するか確認しています。
「C」はリスト(List)内に存在しませんが、「JavaScript」はリスト内に存在するため「TRUE」が表示されています。
また、「Perl」と「Swift」はリスト(List)内に存在しないため「FALSE」が表示されています。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● in演算子使用後-1") text1_in1 = "Python" in text1 or "かくにん" in text1 print(text1_in1) print('● in演算子使用後-2') text1_in2 = "パイソン" in text1 or "かくにん" in text1 print(text1_in2) |
実行結果
or演算子で文字列に複数の値が存在するか確認しています。
「かくにん」は文字列内に含まれていませんが、「Python」は文字列内に含まれているため「True」が表示されています。
また、「パイソン」と「かくにん」は文字列内に含まれていないため、「False」が表示されています。
not演算子(否定)
3つ目はnot演算子と組みあわせて使用します。
notとはinの否定型の演算子になります。
そのためin演算子と組み合わせると、リスト(List)や文字列に値が存在しない場合は「Ture」を、存在する場合は「False」を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● not in演算子使用後-1") list1_in1 = 'Python' not in list1 print(list1_in1) print('● not in演算子使用後-2') list1_in2 = 'VBA' not in list1 print(list1_in2) |
実行結果
not inでリスト(List)に値が存在しないか確認しています。
「Python」はリストに存在するため「False」を、「VBA」はリストに存在しないため「True」が表示されています。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● not in演算子使用後-1") text1_in1 = 'Python' not in text1 print(text1_in1) print('● not in演算子使用後-2') text1_in2 = 'JavaScript' not in text1 print(text1_in2) |
実行結果
not inで文字列に値が存在しないか確認しています。
「Python」は文字列に存在するため「False」を、「VBA」は文字列に存在しないため「True」が表示されています。
in演算子を使用する際の注意点
先ほどまでin演算子を使用してきましたが、注意すべき点が複数あります。
そのため、ここではin演算子を使用する際の注意点についてご紹介します。
リスト(List)同士は完全一致である
まず、1つ目はリスト(List)同士は完全一致であるということです。
in演算子の特定の値とオブジェクトがどちらともリスト(List)である場合、要素単位ではなくリスト自体でを値の存在を確認します。
そのため、リストの要素数と格納位置が一致しない限り、存在しないと判断されます。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● in演算子使用後") list1_in1 = ['JavaScript', 'PHP'] in list1 print(list1_in1) |
実行結果
「JavaScript」と「PHP」はリスト内に存在しますが、「[‘JavaSccript’, ‘PHP’]」という要素は存在しないため、Falseが表示されています。
そのため、もしin演算子をリスト同士で使用する場合は多次元リストに対して使用するようにしましょう。
大文字/小文字は区別される
2つ目は大文字/小文字は区別されるということです。
文字列やリストに対してin演算子を使用する場合、大文字と小文字の文字や要素は違う値と認識します。
そのため、「ANT」と「ant」いう値は違う値となり、存在しない値として認識されるようになります。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● in演算子使用後") listIn = 'python' in text1 print(listIn) |
実行結果
「Python」と「python」は同じ文字ですが、大文字と小文字の違いで存在しないと認識され、「False」が表示されています。
もし、大文字と小文字を区別したくない場合は処理を行う前にlower()やupper()などで文字列を大文字か小文字に統一しましょう。
in演算子を使用した実際のケース
in演算子を使用した実際のケースについてご紹介します。
例えば、in演算子を使用してユーザ名とパスワードを確認するようなコードを作成します。
● index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <!DOCTYPE html> <html lang="ja"> <head> <title>iin演算子でリスト(List)や文字列に値が存在するか確認</title> <meta charset="utf-8"/> </head> <body> <h2>ユーザーの登録</h2> <form action="/result" method="POST"> <p>ユーザ名</p> <div> <input type='text' name='usrnm'> </div> <p>パスワード</p> <div> <input type='text' name='pass'> </div> <button type="submit">送信</button> </form> </body> </html> |
● result.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!DOCTYPE html> <html lang="ja"> <head> <title>in演算子でリスト(List)や文字列に値が存在するか確認</title> <meta charset="utf-8"/> </head> <body> {% if errType == 0 %} <h2>登録が完了しました。</h2> {% endif %} {% if errType == 1 %} <h2>登録が完了できませんでした。</h2> <p>同じユーザー名が既に登録されています。</p> {% endif %} {% if errType == 2 %} <h2>登録が完了できませんでした。</h2> <p>パスワードの設定に誤りがあります。</p> {% endif %} {% if errType == 99 %} <h2>登録が完了できませんでした。</h2> <p>異常なエラーが発生しました。</p> {% endif %} </body> </html> |
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | from flask import Flask, render_template, request app = Flask(__name__) userList = ['marioLuigi11','marioMario12', 'PeachPrinces13', 'yossyDinosaur14', 'Kuppaturtle15', 'donkeyMonkey16'] symbolList = ['#', '%', '$', '&', '*', '@', '^'] @app.route('/') def index(): return render_template('index.html') @app.route('/result', methods=['POST']) def result(): try: user = request.form.get('usrnm') pw= request.form.get('pass') if user in userList: error = 1 else: for symbol in symbolList: if symbol in pw error = 0 break else: error = 2 except Exception as e: error = 99 print(e) finally: return render_template('result.html', errType = error) if __name__ == '__main__': app.run() |
実行結果(登録成功時)
実行結果(登録失敗時)
実行結果(登録失敗時)
in演算子で入力した文字列を確認しています。
今回は下記のような処理を行い、その中でin演算子を使用しています。
- requestで入力したユーザー名とパスワードを受け取る。
- 受け取ったユーザー名が既に登録されていないかin演算子で確認。
- 登録できないというエラーメッセージを表示する。
- 受け取ったパスワードに必須の記号が含まれてるかin演算子で確認。
- 登録できないというエラーメッセージを表示する。
- 登録完了というメッセージを表示する。
(登録されている場合は3の処理を、登録されていない場合は4の処理を行う。)
(含まれていない場合は5の処理を、含まれている場合は6の処理を行う。)
そのため、登録ができたパターンとできなかったパターンがそれぞれ表示されています。
リスト(List)や文字列に値が存在するか確認する他の方法
Pythonではリスト(List)や文字列に値が存在するかどうか確認する方法がin演算子以外にも存在します。
そのため、ここでは値が存在するかどうかを判定する他の方法についてご紹介します。
find()
find()とは、指定した値が文字列の何番に存在するか確認することができる関数になります。
見つけたときは左から数えた番号を、見つからなかった場合は「-1」を返します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● find()使用後-1") text1_find1 = text1.find('演算子') print(text1_find1) print('● find()使用後-2') text1_find2 = text1.find('python') print(text1_find2) |
実行結果
find()で指定した値が文字列に存在するか確認しています。
そのため、下記のような結果が表示されています。
- 「演算子」は文字列内の10番目に存在するため「9」
- 「python」は文字列内に存在しないため「-1」
set()
set()とは集合型のイテレータに変換することができる関数になります。
そのため、リストをset型に変換し、部分集合や上位集合の計算を行うことでリスト(List)に値が存在するか確認することがきます。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● set()使用後-1") list1_set1 = set(list1).issuperset({'JavaScript'}) print(list1_set1) print("● set()使用後-1") list1_set2 = set(list1).issuperset({'JavaScript', 'C'}) print(list1_set2) |
実行結果
set()で指定した値がリスト(List)に存在するか確認しています。
今回は部分集合の処理を行ったため、下記のような結果が表示されています。
- 「JavaScript」はリスト(List)の中に存在するため「True」
- 「C」はリスト(List)に存在しないため「False」
index()
index()とは、指定した値がオブジェクトの何番目に格納されているか確認することができる関数になります。
見つけたときは左から数えた要素のインデックスを返し、見つからなかった場合はエラーになります。
こちらの関数はリストと文字列のどちらでも使用することができます。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● index()使用後-1") list1_idx = list1.index('Java') print(list1_idx) print('● 対象の文字列') text1 = 'Pythonのin演算子で指定した値が存在するか確認' print(text1) print("● index()使用後-2") text1_idx = text1.index('Python') print(text1_idx) |
実行結果
index()で指定した値がオブジェクトに存在するか確認しています。
そのため、下記のような結果が表示されています。
- 「Java」はリスト(List)の5番目に存在するため「4」
- 「Python」は文字列の1番目存在するため「0」
もし、index()について詳しく知りたい場合は下記の記事をご参考ください。
まとめ
● in演算子とはオブジェクトに値が存在するかどうかを判定する演算子である。
● リスト(List)に対してin演算子を使用すると、指定した値が要素として存在するかどうかを確認する。
(存在する場合は「True」を、存在しない場合は「False」を返す。)
● 文字列に対してin演算子を使用すると、指定した値が文字として存在するかどうかを確認する。
(存在する場合は「True」を、存在しない場合は「False」を返す。)
● in演算子でリスト(List)や文字列に複数の値が存在するか確認するには繰り返し処理を使用する。
● in演算子は下記のような論理演算子と組みわわせてを使用することができる。
・and演算子
(指定した値が全て存在する場合にTrueを返し、それ以外はFalseを返す。)
・or演算子
(指定した複数の値がどれか1つでも存在する場合にTrueを返し、それ以外はFalseを返す。)
・not演算子
(指定した値が存在しない場合にTrueを返し、それ以外はFalseを返す。)
● in演算子を使用する際の注意点として下記の2点がある
・リスト(List)同士の比較は完全一致である
・大文字/小文字は区別される
● in演算子以外にも下記の関数でリスト(List)や文字列に値が存在するか判定することができる。
・find()
(文字列から指定した文字を検索する関数)
・index()
(リストや文字列から指定した文字を検索する関数)
・set()
(イテレータを集合型に変換する関数)