・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2024年01月11日に投稿されました。)
Pythonで文字列の長さを取得するにはlen()を使用します。
len()とは、データのサイズを取得する関数になります。
そのため、len()に文字列を指定することで文字数をカウントし、カウントした文字数の合計値を返します。
また、全角文字やエスケープ文字にも1文字としてカウントすることから、文字種が混合する文字列でも正確に文字数をカウントするようになります。
しかし、バイト数を目的としてカウントする場合は不便であるため、注意して使用するようにしましょう。
今回はPythonのlen()で文字列の長さ(文字数)を取得する方法について紹介していきます。
文字列の文字数を取得したい場合
len()とは
len()とは、データのサイズを調べる関数になります。
サイズを調べることから指定したデータの文字数を取得し、計算した結果を返すようになります。
len()の書き方
len()の書き方は下記のようになります。
1 | len('オブジェクト') |
len()の括弧の中に必須なパラメータを1つ指定することで使用することができます。
len()のパラメータ
len()のパラメータは下記のようになります。
- オブジェクト:(必須)
サイズを調べたいオブジェクトを指定する
len()は必須なパラメータとしてオブジェクトを指定します。
len()の返り値
len()の返り値は指定したオブジェクトのサイズとなります。
len()で文字列の長さを取得するサンプルコード
len()で文字列の長さを取得するサンプルコードサンプルコードをご紹介します。
ここでは、下記の2パターンでlen()を使用します。
- 文字列が1文字以上の場合
- 文字列が空文字の場合
文字列が1文字以上の場合
文字列が1文字以上の場合にlen()を使用すると、文字列の文字数を返します。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = 'python' print(text1) print("● len()使用後") text1_len = len(text1) print(text1_len) |
実行結果
len()で文字列の長さ(文字数)を取得しています。
「python」は6文字であるため、「6」が表示されています。
文字列が空文字の場合
文字列が空文字の場合にlen()を使用すると、「0」を返します。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = '' print(text1) print("● len()使用後") text1_len = len(text1) print(text1_len) |
実行結果
len()で文字列の長さ(文字数)を取得しています。
今回は文字列が空文字であるため、「0」が表示されています。
len()で様々な文字を含んだ文字列の長さ(文字数)を取得する場合
len()は、半角文字だけでなく、他も文字を含んだ文字列でも正確に文字数を取得します。
そのため、ここではlen()で様々な文字を含んだ文字列の長さ(文字数)を取得します。
文字列に全角文字が含まれる場合
文字列に全角文字が含まれる場合にlen()を使用すると、半角全角関係なくどちらとも「1」とカウントします。
● main.py
1 2 3 4 5 6 7 | print('● 対象の文字列') text1 = 'pythonでコードを作成' print(text1) print("● len()使用後") text1_len = len(text1) print(text1_len) |
実行結果
len()で全角文字を含む文字列の長さ(文字数)を取得しています。
「pythonでコードを作成」は13文字であるため、「13」が表示されています。
文字列にエスケープ文字が含まれる場合
文字列にエスケープ文字が含まれる場合にlen()を使用すると、エスケープ文字を含んだ文字数をカウントします。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | print('● 対象の文字列-1') text1 = 'pythonでコードを作成\nスクレイピングを行う。' print(text1) print("● len()使用後-1") text1_len = len(text1) print(text1_len) print('● 対象の文字列-2') text2 = 'pythonでコードを作成\'スクレイピング\'を行う。' print(text2) print("● len()使用後-2") text2_len = len(text2) print(text2_len) |
実行結果
len()でエスケープ文字を含む文字列の長さ(文字数)を取得しています。
「pythonでコードを作成\nスクレイピングを行う。」は「24文字」 + 「改行」のため、「25」が表示されています。
また、「pythonでコードを作成\’スクレイピング\’を行う。」は「24文字」 + 「2つの'(シングルクォーテーション)」のため、「26」が表示されています。
len()で文字列のバイト数を取得する場合
len()で文字列のバイト数を取得するには、オブジェクトに対してencode()を使用します。
encode()とはオブジェクトを指定したコードに変換する関数になります。
そのため、指定した文字コードに変換した文字列に対してlen()を使用することでバイト数を取得することが可能になります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | print('● 対象の文字列-1') text1 = 'python' print(text1) print("● len()使用後-1(バイト数)") text1_byte = len(text1.encode('utf-8')) print(text1_byte) print('● 対象の文字列-2') text2 = 'python' print(text2) print("● len()使用後-2(バイト数)") text2_byte = len(text2.encode('utf-8')) print(text2_byte) |
実行結果
len()で文字列のバイト数を取得しています。
「pythonでコードを作成」は13文字であるため、「13」が表示されています。
また、「pythonでコードを作成」は13文字であるため、「13」が表示されています。
len()を使用する際の注意点
先程までlen()で文字列の長さを取得していましたが、注意しておかなければならない点があります。
そのため、ここではlen()を使用する際の注意点についてご紹介します。
マルチバイト文字との区別ができない
まず、1つ目はマルチバイト文字との区別ができないということです。
そもそも、マルチバイト文字とは全角文字のような2バイト以上で表現する文字となります。
しかし、len()の場合はバイトサイズ関係なく1文字を「1」とカウントしてしまうため、マルチバイトなのかどうかの判断が困難になります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | print('● 対象の文字列-1') text1 = 'python' print(text1) print("● len()使用後-1") text1_byte = len(text1.encode('utf-8')) print("・ バイト数: " + str(text1_byte)) text1_len = len(text1) print("・ 文字数: " + str(text1_len)) print('● 対象の文字列-2') text2 = 'python' print(text2) print("● len()使用後-2") text2_byte = len(text2.encode('utf-8')) print("・ バイト数: " + str(text2_byte)) text2_len = len(text2) print("・ 文字数: " + str(text2_len)) |
実行結果
全角文字はマルチバイト文字になりますが、len()を使用すると半角全角どちらも同じサイズを取得しています。
そのため、指定した文字列がマルチバイト文字なのかどうかの判断が難しくなります。
もし、マルチバイト文字がどうかを確認する場合はencode()で文字コードを指定した文字列に対してlen()を使用すると良いですよ。
文字コードによって取得するサイズが異なる
そして2つ目は、文字コードによって取得するサイズが異なるということです。
文字コードによってバイト数が異なるため、同じ文字列でも取得できるサイズが異なってしまいます。
例えば、UTF-8やUTF-16の同じ文字列のサイズをlen()で取得します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | print('● 対象の文字列-1') text1 = 'python' print(text1) print("● len()使用後-1") text1_1_len = len(text1.encode('utf-8')) print("・UTF-8: " + str(text1_1_len)) text1_2_len = len(text1.encode('utf-16')) print("・UTF-16: " + str(text1_2_len)) print('● 対象の文字列-2') text2 = 'python' print(text2) print("● len()使用後-2") text2_1_len = len(text1.encode('utf-8')) print("・UTF-8: " + str(text2_1_len)) text2_2_len = len(text1.encode('utf-16')) print("・UTF-16: " + str(text2_1_len)) |
実行結果
全角の文字列のサイズは同じですが、半角の文字列のサイズがUTF-8だと「12」とUTF-16だと「14」になっています。
そのため、len()は同じ文字列でも文字コードによって取得するサイズが異なります。
len()を使用した実際のケース
len()を使用した実際のケースについてご紹介します。
例えば、len()を使用してパスワードの入力チェックをするようなコードを作成します。
● index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!DOCTYPE html> <html lang="jp"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>len()で文字列の長さ(文字数)を取得</title> </head> <body> <h2>新規ユーザー登録</h2> <form action="/result" method="POST"> <p>ユーザー名</p> <input type="text" name="username"> <p>パスワード</p> <input type="text" name="pass"> <button type="submit">登録</button> </form> </body> </html> |
● result.html
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!DOCTYPE html> <html lang="jp"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>len()で文字列の長さ(文字数)を取得</title> </head> <body> <h2 class="ret">{{ result }}</h2> <p class="msg">{{ errorMsg }}</p> </body> </html> |
● app.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 | from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/result', methods=['POST']) def result(): usrName = '' passwd = '' ret = '' msg = '' usrName = request.form.get('user') passwd = request.form.get('pass') if len(passwd) >= 6 and len(passwd) <= 10: ret = 'ユーザ登録が完了しました。' else: ret = 'ユーザ登録ができませんでした。' msg = 'パスワードは6文字以上10文字以下で設定してください。' return render_template('result.html', result = ret, errorMsg = msg) if __name__ == '__main__': app.run() |
実行結果(成功時)
実行結果(失敗時)
len()でパスワードの入力チェックを行っています。
そのため、パスワードを6文字以上10文字以下で設定すると「登録されました。」というメッセージが表示されます。
しかし、パスワードを6文字未満もしくは10文字より大きいと「登録できませんでした。」というエラーメッセージが表示されます。
len()をリスト(List)対して使用する場合
len()をリスト(List)対して使用することで、リスト内に格納されている要素の数を取得することができます。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['JavaScript', 'perl', 'Python', 'shell', 'Java', 'swift'] print(list1) print("● len()使用後") list1_len = len(list1) print(list1_len) |
実行結果
len()でリスト(List)に格納されている要素の数を取得しています。
今回は6つの要素が格納されたリストに対して使用しているため、「6」が表示されています。
もし、len()でリスト(List)の要素数を取得する方法について詳しく知りたい場合は下記の記事をご参考ください。
まとめ
⚫︎ len()とは、データのサイズを調べる関数である。
⚫︎ len()を使用するには下記のパラメータを指定する。
・オブジェクト(必須)
⚫︎ 文字列が1文字以上の場合にlen()を使用すると、文字列の文字数を返す。
⚫︎ 文字列が空文字の場合にlen()を使用すると、「0」を返す。
⚫︎ 全角文字を含む文字列に対してlen()を使用すると、全角文字も「1」とカウントした文字列の文字数を返す。
⚫︎ エスケープ文字を含む文字列に対してlen()を使用すると、エスケープ文字を含んだ文字列の文字数を返す。
⚫︎ len()で文字列のバイト数を取得するには文字列にencode()を指定する。
⚫︎ len()で文字列の長さ(文字数)を取得する場合、下記の点に注意して使用する。
・マルチバイト文字の区別ができない。
(len()は半角文字や全角文字であろうと「1つの文字」としてカウントするため)
・文字コードによって取得するサイズが異なる。
(文字コードを指定すると、バイト数を取得するため)
⚫︎ len()をリスト(List)に対して使用すると、リストに格納されている要素数を取得する。