Python 文字列完全マスター:作成、アクセス、操作のすべて
文字列は Python で最も人気のある型の 1 つです。文字をクォートで囲むだけで簡単に作成できます。Python はシングルクォートとダブルクォートを同等に扱います。文字列の作成は、変数に値を代入するのと同じくらい簡単です。例:
var1 = 'Hello World!' var2 = "Python Programming"
文字列内の値へのアクセス
Python は文字型をサポートしていません。これらは長さ 1 の文字列として扱われ、部分文字列と見なされます。
部分文字列にアクセスするには、インデックスまたはインデックスを指定してスライスするために角括弧を使用します。例:
ライブ デモ#!/usr/bin/python var1 = 'Hello World!' var2 = "Python Programming" print "var1[0]: ", var1[0] print "var2[1:5]: ", var2[1:5]
上記のコードを実行すると、次の結果が得られます。
var1[0]: H var2[1:5]: ytho
文字列の更新
既存の文字列を「更新」するには、(再)変数に別の文字列を代入します。新しい値は前の値に関連付けることも、全く異なる文字列にすることもできます。例:
ライブ デモ#!/usr/bin/python var1 = 'Hello World!' print "Updated String :- ", var1[:6] + 'Python'
上記のコードを実行すると、次の結果が得られます。
Updated String :- Hello Python
エスケープ文字
以下の表は、バックスラッシュ記法で表現できるエスケープ文字または非印刷文字の一覧です。
エスケープ文字は、シングルクォートでもダブルクォートでも解釈されます。
| バックスラッシュ記法 | 16進数文字 | 説明 |
|---|---|---|
| \a | 0x07 | ベルまたはアラート |
| \b | 0x08 | バックスペース |
| \cx | Control-x | |
| \C-x | Control-x | |
| \e | 0x1b | エスケープ |
| \f | 0x0c | フォームフィード |
| \M-\C-x | Meta-Control-x | |
| \n | 0x0a | 改行 |
| \nnn | 8進表記(n は 0-7 の範囲) | |
| \r | 0x0d | キャリッジリターン |
| \s | 0x20 | スペース |
| \t | 0x09 | タブ |
| \v | 0x0b | 垂直タブ |
| \x | 文字 x | |
| \xnn | 16進表記(n は 0-9、a-f、A-F の範囲) |
文字列特殊演算子
文字列変数 a が 'Hello'、変数 b が 'Python' を保持していると仮定すると:
| 演算子 | 説明 | 例 |
|---|---|---|
| + | 連結 - 演算子の両側の値を結合 | a + b は HelloPython になる |
| * | 反復 - 同じ文字列の複数コピーを連結して新しい文字列を作成 | a*2 は HelloHello になる |
| [] | スライス - 指定されたインデックスの文字を取得 | a[1] は e になる |
| [ : ] | 範囲スライス - 指定された範囲の文字を取得 | a[1:4] は ell になる |
| in | メンバーシップ - 指定された文字が文字列に存在すれば真を返す | H in a は 1 になる |
| not in | メンバーシップ - 指定された文字が文字列に存在しなければ真を返す | M not in a は 1 になる |
| r/R | 生文字列 - エスケープ文字の実際の意味を抑制。生文字列の構文は通常の文字列と同じだが、クォートマークの直前に文字 "r" を付ける。"r" は小文字(r)でも大文字(R)でもよく、最初のクォートマークの直前に配置する必要がある。 | print r'\n' は \n を出力、print R'\n' も \n を出力 |
| % | フォーマット - 文字列フォーマットを実行 | 次のセクションを参照 |
文字列フォーマット演算子
Python のクールな機能の 1 つは、文字列フォーマット演算子 % です。この演算子は文字列に固有で、C の printf() 関数ファミリがないことを補っています。シンプルな例:
ライブ デモ#!/usr/bin/python
print "My name is %s and weight is %d kg!" % ('Zara', 21)
上記のコードを実行すると、次の結果が得られます。
My name is Zara and weight is 21 kg!
% とともに使用できる完全なシンボルセット:
| フォーマットシンボル | 変換 |
|---|---|
| %c | 文字 |
| %s | フォーマット前に str() による文字列変換 |
| %i | 符号付き10進整数 |
| %d | 符号付き10進整数 |
| %u | 符号なし10進整数 |
| %o | 8進整数 |
| %x | 16進整数(小文字) |
| %X | 16進整数(大文字) |
| %e | 指数表記(小文字 'e') |
| %E | 指数表記(大文字 'E') |
| %f | 浮動小数点実数 |
| %g | %f と %e の短い方 |
| %G | %f と %E の短い方 |
その他のサポートされるシンボルと機能:
| シンボル | 機能 |
|---|---|
| * | 引数で幅または精度を指定 |
| - | 左揃え |
| + | 符号を表示 |
| <sp> | 正の数の前に空白を入れる |
| # | 8進法の先頭ゼロ('0')または16進法の先頭 '0x' または '0X' を追加('x' または 'X' が使用されたかどうかに依存) |
| 0 | 左側をスペースの代わりにゼロで埋める |
| % | '%%' でリテラルの単一 '%' を得る |
| (var) | マッピング変数(辞書引数) |
| m.n | m は最小総幅、n は小数点以下の桁数(適用される場合) |
トリプルクォート
Python のトリプルクォートを使用すると、文字列を複数行にわたって記述でき、逐語的な改行、タブ、その他の特殊文字を含めることができます。
トリプルクォートの構文は、連続する 3 つのシングルまたはダブルクォートで構成されます。
ライブ デモ#!/usr/bin/python para_str = """this is a long string that is made up of several lines and non-printable characters such as TAB ( \t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \n ], or just a NEWLINE within the variable assignment will also show up. """ print para_str
上記のコードを実行すると、次の結果が得られます。文字列の "up." と終了トリプルクォートの間の最後の改行まで、すべての特殊文字が印刷形式に変換されていることに注目してください。また、行末の明示的なキャリッジリターンまたはそのエスケープコード(\n)のいずれかによって改行が発生することにも注目してください。
this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up.
生文字列では、バックスラッシュを特別な文字として一切扱いません。生文字列に入力したすべての文字が、書いたままの形で保持されます。
ライブ デモ#!/usr/bin/python print 'C:\\nowhere'
上記のコードを実行すると、次の結果が得られます。
C:\nowhere
それでは生文字列を使用してみましょう。r'expression' として式を記述します。
ライブ デモ#!/usr/bin/python print r'C:\\nowhere'
上記のコードを実行すると、次の結果が得られます。
C:\\nowhere
Unicode 文字列
通常の Python 文字列は内部的に 8 ビット ASCII として格納されますが、Unicode 文字列は 16 ビット Unicode として格納されます。これにより、世界中のほとんどの言語の特殊文字を含む、より多様な文字セットが可能になります。Unicode 文字列については以下に限定して説明します。
ライブ デモ#!/usr/bin/python print u'Hello, world!'
上記のコードを実行すると、次の結果が得られます。
Hello, world!
ご覧の通り、Unicode 文字列は生文字列が接頭辞 r を使用するのと同様に、接頭辞 u を使用します。
組み込み文字列メソッド
Python には文字列を操作するための以下の組み込みメソッドが含まれています。
| 番号 | メソッドと説明 |
|---|---|
| 1 | capitalize() 文字列の最初の文字を大文字にする |
| 2 | center(width, fillchar) 元の文字列を中央に配置し、合計 width 列になるようにスペースでパディングした文字列を返す |
| 3 | count(str, beg=0, end=len(string)) str が文字列または部分文字列(開始インデックス beg と終了インデックス end が指定されている場合)に何回出現するかをカウント |
| 4 | decode(encoding='UTF-8', errors='strict') encoding に登録されたコーデックを使用して文字列をデコード。encoding はデフォルトの文字列エンコーディングがデフォルト |
| 5 | encode(encoding='UTF-8', errors='strict') 文字列のエンコード版を返す。エラー時、errors に 'ignore' または 'replace' が指定されていない限り、デフォルトで ValueError を発生 |
| 6 | endswith(suffix, beg=0, end=len(string)) 文字列または部分文字列(開始インデックス beg と終了インデックス end が指定されている場合)が suffix で終わるかどうかを判定。真なら true、偽なら false を返す |
| 7 | expandtabs(tabsize=8) 文字列内のタブを複数のスペースに展開。tabsize が指定されていない場合、タブ 1 つあたり 8 スペースがデフォルト |
| 8 | find(str, beg=0, end=len(string)) str が文字列または部分文字列(開始インデックス beg と終了インデックス end が指定されている場合)に出現するかを判定。見つかればインデックスを、見つからなければ -1 を返す |
| 9 | index(str, beg=0, end=len(string)) find() と同じだが、str が見つからない場合に例外を発生 |
| 10 | isalnum() 文字列が少なくとも 1 文字あり、すべての文字が英数字なら true、そうでなければ false を返す |
| 11 | isalpha() 文字列が少なくとも 1 文字あり、すべての文字がアルファベットなら true、そうでなければ false を返す |
| 12 | isdigit() 文字列が数字のみを含むなら true、そうでなければ false を返す |
| 13 | islower() 文字列が少なくとも 1 つの大文字小文字のある文字を持ち、すべての大文字小文字のある文字が小文字なら true、そうでなければ false を返す |
| 14 | isnumeric() Unicode 文字列が数値文字のみを含むなら true、そうでなければ false を返す |
| 15 | isspace() 文字列が空白文字のみを含むなら true、そうでなければ false を返す |
| 16 | istitle() 文字列が適切に "タイトルケース" なら true、そうでなければ false を返す |
| 17 | isupper() 文字列が少なくとも 1 つの大文字小文字のある文字を持ち、すべてが大文字なら true、そうでなければ false を返す |
| 18 | join(seq) シーケンス seq の要素の文字列表現を、区切り文字列で連結して 1 つの文字列にまとめる |
| 19 | len(string) 文字列の長さを返す |
| 20 | ljust(width[, fillchar]) 元の文字列を左揃えにし、合計 width 列になるようにスペースでパディングした文字列を返す |
| 21 | lower() 文字列内のすべての大文字を小文字に変換 |
| 22 | lstrip() 文字列の先頭の空白文字をすべて削除 |
| 23 | maketrans() translate 関数で使用する変換テーブルを返す |
| 24 | max(str) 文字列 str から最大のアルファベット文字を返す |
| 25 | min(str) 文字列 str から最小のアルファベット文字を返す |
| 26 | replace(old, new [, max]) 文字列内の old のすべての出現を new に置換。max が指定されている場合は最大 max 回まで置換 |
| 27 | rfind(str, beg=0, end=len(string)) find() と同じだが、文字列を後方から検索 |
| 28 | rindex(str, beg=0, end=len(string)) index() と同じだが、文字列を後方から検索 |
| 29 | rjust(width[, fillchar]) 元の文字列を右揃えにし、合計 width 列になるようにスペースでパディングした文字列を返す |
| 30 | rstrip() 文字列の末尾の空白文字をすべて削除 |
| 31 | split(str="", num=string.count(str)) 区切り文字 str(指定されない場合はスペース)で文字列を分割し、部分文字列のリストを返す。num が指定されている場合は最大 num 個の部分文字列に分割 |
| 32 | splitlines(num=string.count('\n')) すべて(または num 個)の改行で文字列を分割し、改行を除いた各行のリストを返す |
| 33 | startswith(str, beg=0, end=len(string)) 文字列または部分文字列(開始インデックス beg と終了インデックス end が指定されている場合)が部分文字列 str で始まるかどうかを判定。真なら true、偽なら false を返す |
| 34 | strip([chars]) 文字列に対して lstrip() と rstrip() の両方を実行 |
| 35 | swapcase() 文字列内のすべての文字の大文字小文字を反転 |
| 36 | title() 文字列の "タイトルケース" 版を返す。つまり、すべての単語が大文字で始まり、残りは小文字になる |
| 37 | translate(table, deletechars="") 翻訳テーブル str(256 文字)に従って文字列を翻訳し、del 文字列の文字を削除 |
| 38 | upper() 文字列内の小文字を大文字に変換 |
| 39 | zfill(width) 元の文字列を左側からゼロでパディングし、合計 width 文字にする。数値向けで、符号は保持される(ゼロ 1 つ分を除く) |
| 40 | isdecimal() Unicode 文字列が 10 進数字のみを含むなら true、そうでなければ false を返す |
Python
- C# 文字列をマスターする:基礎、操作、高度なテクニック
- Python 演算子完全マスター: 包括的ガイド
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Python文字列操作マスター:replace、join、split、reverse、大文字小文字変換
- Python strip()メソッド完全ガイド:実践例付き
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Python format()文字列を明確な例でマスター
- Python len()関数:オブジェクトの長さを測る実践ガイド
- Python String.find()メソッド完全ガイド:構文、例、代替手法
- Python enumerate()をマスター:リスト、タプル、文字列、辞書でインデックス付きループ
- Java文字列をマスター:生成、メソッド、ベストプラクティス