Python | 文字列操作

Python
スポンサーリンク

文字列操作(結合・分割・検索など)は日常的に頻繫に使います。
初心者向けに考え方・代表的なメソッド・使いどころ実例コード、最後に練習問題(解答付き)をまとめます。コードはそのまま Python 3 で動きます。

基本の考え方

  • Python の文字列は 不変(immutable):既存の文字列を書き換えることはできず、操作は 新しい文字列を返す ことに注意。
  • 文字列を扱うときは「結合」「分割」「検索」「置換」「整形(フォーマット)」のパターンがよく出てきます。
  • 大量の短い文字列を順に結合する場合は + より str.join() が効率的(特にループ中)。

1. 結合(Concatenation / Join)

よく使う方法

  • +:単純な結合
"Hello, " + "world"   # -> "Hello, world"
Python
  • join():リストやイテラブルを指定の区切りでつなぐ(推奨)
words = ["I", "love", "Python"]
" ".join(words)       # -> "I love Python"
",".join(["a","b"])   # -> "a,b"
Python
  • f-string(フォーマット)で組み立て
name = "Aki"; age = 28
f"{name}さんは{age}歳"   # -> "Akiさんは28歳"
Python

効率メモ

ループで何度も s = s + new をすると非効率。複数要素の結合はリストにためて join() がベスト。


2. 分割(Split / Partition)

split():区切りで分割してリストを返す

"apple,banana,cherry".split(",")   # -> ['apple','banana','cherry']
"one two  three".split()           # -> ['one','two','three'](空白連続は自動で扱う)
"1,2,3,4".split(",", maxsplit=2)   # -> ['1','2','3,4']
Python

rsplit():右から分割(maxsplit と組合せて末尾優先)

"a,b,c,d".rsplit(",", 1)  # -> ['a,b,c','d']
Python

partition() / rpartition():区切り文字を中心に3要素(左右と区切り)

"key:value".partition(":")  # -> ('key', ':', 'value')
Python

3. 検索・判定(Find / In / Count)

in 演算子(最もシンプル)

"Py" in "Python"    # -> True
Python

find() / rfind():見つかれば開始インデックス、見つからなければ -1

s = "I love Python"
s.find("Python")    # -> 7
s.find("java")      # -> -1
s.rfind("o")        # -> 最後に見つかった位置
Python

index() / rindex():見つからないと 例外 を投げる(ValueError)

s.index("Python")   # 見つからなければエラーになるので注意
Python

count():出現回数

"apple apple apple".count("apple")   # -> 3
Python

startswith / endswith:前後一致チェック

url = "https://example.com"
url.startswith("https://")   # -> True
url.endswith(".com")         # -> True
Python

4. 置換(Replace)

s = "I like Java"
s2 = s.replace("Java", "Python")   # -> "I like Python"
# 全て置換される(第3引数で回数制限も可能)
s.replace("a", "A", 2)  # 最初の2箇所のみ置換
Python

5. 前後空白の削除(Strip)

"  hello \n".strip()    # -> "hello"(両端の空白や改行を取り除く)
"  abc  ".lstrip()      # -> "abc  "
"  abc  ".rstrip()      # -> "  abc"
Python

6. 部分取り出し(スライス)

s = "Python"
s[0]      # 'P'
s[-1]     # 'n'
s[1:4]    # 'yth'  (start: inclusive, end: exclusive)
s[:3]     # 'Pyt'
s[3:]     # 'hon'
s[::2]    # 'Pto' (ステップ指定)
Python

7. 正規表現での高度な検索・分割(re モジュール)

単純な部分文字列検索で足りないとき(パターンマッチング、複雑な分割)は re を使います:

import re
re.findall(r"\b\w+@\w+\.\w+\b", text)   # メールアドレスの抽出例(簡易)
re.split(r"\s+", "a  b   c")            # 空白の連続で分割
Python

(正規表現は強力だが最初は難しいので必要なときに学ぶと良い)


実例(よくあるユースケース)

  1. CSV の一列を取り出す:
line = "taro,20, engineer"
fields = line.split(",")
name = fields[0]   # 'taro'
Python
  1. 複数行テキストから空行を除去:
lines = text.splitlines()
clean = [L.strip() for L in lines if L.strip() != ""]
Python
  1. ファイル名の拡張子取得:
fname = "report.pdf"
ext = fname.rsplit(".", 1)[-1]   # -> 'pdf'(拡張子がないとき注意)
Python

小さな注意点(トラブル回避)

  • split() のデフォルトは空白(連続空白を一塊として扱う)。split(",") のように明示するか用途を確認。
  • index() は見つからないと例外。安全に判定するなら find() または in を使う。
  • ユーザ入力やファイルから来る文字列は先に strip() しておくと便利(余計な改行・空白を消す)。
  • 大きな文字列を多数つなぐときは join() を使う(性能向上)。

練習問題 — 解答付き

問1: ["red","green","blue"]; で連結して "red;green;blue" を作れ。
解答:

";".join(["red","green","blue"])
Python

問2: "name,email,age" の 2 番目(0始まりでインデックス 1)を取り出せ("email")。
解答:

"namae,email,age".split(",")[1]  # -> "email"  (typo注意:正しい文字列を使おう)
# 正しくは:
" name,email,age ".replace(" ", "").split(",")[1]
Python

※ 上は注意喚起:データに余分な空白がある場合は strip()/replace() を先に。

問3: s = " hello world " から両端の空白を取り、先頭を大文字にして表示。
解答:

s.strip().capitalize()   # -> "Hello world"
Python

問4: email = "taro@example.com" からドメイン example.com を取り出せ。
解答:

email.split("@")[1]
Python

問5: s = "apple banana apple"apple の出現回数を数えよ。
解答:

s.count("apple")   # -> 2
Python
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました