文字列操作(結合・分割・検索など)は日常的に頻繫に使います。
初心者向けに考え方・代表的なメソッド・使いどころと実例コード、最後に練習問題(解答付き)をまとめます。コードはそのまま Python 3 で動きます。
基本の考え方
- Python の文字列は 不変(immutable):既存の文字列を書き換えることはできず、操作は 新しい文字列を返す ことに注意。
- 文字列を扱うときは「結合」「分割」「検索」「置換」「整形(フォーマット)」のパターンがよく出てきます。
- 大量の短い文字列を順に結合する場合は
+よりstr.join()が効率的(特にループ中)。
1. 結合(Concatenation / Join)
よく使う方法
+:単純な結合
"Hello, " + "world" # -> "Hello, world"
Pythonjoin():リストやイテラブルを指定の区切りでつなぐ(推奨)
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']
Pythonrsplit():右から分割(maxsplit と組合せて末尾優先)
"a,b,c,d".rsplit(",", 1) # -> ['a,b,c','d']
Pythonpartition() / rpartition():区切り文字を中心に3要素(左右と区切り)
"key:value".partition(":") # -> ('key', ':', 'value')
Python3. 検索・判定(Find / In / Count)
in 演算子(最もシンプル)
"Py" in "Python" # -> True
Pythonfind() / rfind():見つかれば開始インデックス、見つからなければ -1
s = "I love Python"
s.find("Python") # -> 7
s.find("java") # -> -1
s.rfind("o") # -> 最後に見つかった位置
Pythonindex() / rindex():見つからないと 例外 を投げる(ValueError)
s.index("Python") # 見つからなければエラーになるので注意
Pythoncount():出現回数
"apple apple apple".count("apple") # -> 3
Pythonstartswith / endswith:前後一致チェック
url = "https://example.com"
url.startswith("https://") # -> True
url.endswith(".com") # -> True
Python4. 置換(Replace)
s = "I like Java"
s2 = s.replace("Java", "Python") # -> "I like Python"
# 全て置換される(第3引数で回数制限も可能)
s.replace("a", "A", 2) # 最初の2箇所のみ置換
Python5. 前後空白の削除(Strip)
" hello \n".strip() # -> "hello"(両端の空白や改行を取り除く)
" abc ".lstrip() # -> "abc "
" abc ".rstrip() # -> " abc"
Python6. 部分取り出し(スライス)
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' (ステップ指定)
Python7. 正規表現での高度な検索・分割(re モジュール)
単純な部分文字列検索で足りないとき(パターンマッチング、複雑な分割)は re を使います:
import re
re.findall(r"\b\w+@\w+\.\w+\b", text) # メールアドレスの抽出例(簡易)
re.split(r"\s+", "a b c") # 空白の連続で分割
Python(正規表現は強力だが最初は難しいので必要なときに学ぶと良い)
実例(よくあるユースケース)
- CSV の一列を取り出す:
line = "taro,20, engineer"
fields = line.split(",")
name = fields[0] # 'taro'
Python- 複数行テキストから空行を除去:
lines = text.splitlines()
clean = [L.strip() for L in lines if L.strip() != ""]
Python- ファイル名の拡張子取得:
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