Python文字列の基本操作とフォーマット方法

文字列の基礎概念

文字列(String)は、一連の文字で構成される順序付きデータ型であり、シングルクォーテーション(' ')またはダブルクォーテーション(" ")で囲んで定義されます。主な特徴は以下の通りです:

  • アルファベット、数字、記号、空白などを含む任意の文字を扱える
  • 不変性(Immutable):作成後、中の文字を直接編集できない
  • インデックスアクセス、スライス、ループ走査などの操作が可能

文字列の基本操作

1. リストと類似する操作

1) インデックスによるアクセス(0から始まる)

文字列内の特定位置の文字にアクセスできます。正方向では0から始まり、逆方向では-1から始まります。

text = "hello"
print(text[0])   # 出力: h
print(text[-1])  # 出力: o
# text[5] など無効なインデックスはエラーになる

2) スライス操作([開始:終了])

指定した範囲の文字列を抽出します。終了インデックスは含まれません。

text = "python"
print(text[0:4])  # 出力: pyth
print(text[:3])   # 出力: pyt(開始省略時は0)
print(text[2:])   # 出力: thon(終了省略時は末尾)

3) forループによる全文字の走査

各文字を順番に取得して処理します。

text = "world"
for char in text:
    print(char)

2. リストとの違い

  • 文字列は不変:値の変更は不可。例:
    text = "abc"
    text[0] = "x"  # → TypeError: 'str' object does not support item assignment
  • リストは可変:要素の変更が可能。
    lst = ['a', 'b']
    lst[0] = 'x'
    print(lst)  # 出力: ['x', 'b']

3. 実践例:チェス盤の表示

turtleモジュールを使用して、チェスの駒をテキスト形式で描画します。

import turtle

# 黒い駒と白い駒の定義
black_pieces = "♜♞♝♛♚♟"
white_pieces = "♖♘♗♕♔♙"

turtle.penup()
turtle.goto(0, 0)

# 1行目:黒い駒(先頭5つ)
for piece in black_pieces[:5]:
    turtle.write(piece, font=('Arial', 40))
    turtle.forward(40)

# 1行目:残りの駒(反転)
for idx in [2, 1, 0]:
    turtle.write(black_pieces[idx], font=('Arial', 40))
    turtle.forward(40)

# 2行目:兵(8個)
turtle.goto(0, -50)
for _ in range(8):
    turtle.write(black_pieces[-1], font=('Arial', 40))
    turtle.forward(40)

# 3行目:白い駒(先頭5つ)
turtle.goto(0, -100)
for piece in white_pieces[:5]:
    turtle.write(piece, font=('Arial', 40))
    turtle.forward(40)

# 3行目:残りの駒(反転)
for idx in [2, 1, 0]:
    turtle.write(white_pieces[idx], font=('Arial', 40))
    turtle.forward(40)

# 4行目:白い兵
turtle.goto(0, -150)
for _ in range(8):
    turtle.write(white_pieces[-1], font=('Arial', 40))
    turtle.forward(40)

turtle.done()

文字列のフォーマット方法

1. %形式(旧式)

プレースホルダを使って文字列を埋め込みます。

name = "さくら"
age = 20
print("こんにちは!私は%sさんで、今年%d歳です。" % (name, age))

2. format()メソッド

位置引数や名前付き引数で置換が可能です。

template = "科目:{0}、時間:{1}"
print(template.format("数学", "14:00-16:00"))

# 引数の順序入れ替えも可能
print("時間:{1}、科目:{0}".format("英語", "15:00-17:00"))

3. f-strings(Python 3.6以降)

コードの読みやすさと実行速度が優れており、推奨される方法。

name = "寧寧"
age = 2
print(f"こんにちは!私は{name}、今年{age}歳です。")

タグ: Python 文字列操作 スライス インデックス forループ

10月16日 03:56 投稿