プログラミング

Step 6: 文字列の操作(文字を足したり、取り出したりする)

Step 6: 文字列の操作(文字を足したり、取り出したりする)

概要

フリーランスエンジニア スリーネクスト

本稿はPythonにおける基本的な文字列操作を初心者にも分かりやすく解説します。文字列を「文字が連結した電車」に例え、+演算子による文字列の「連結」や、*演算子での繰り返しを説明。

また、各文字に割り振られた「インデックス」を利用し、[番号]で1文字を、[開始:終了]のスライスで部分文字列を正確に取り出す方法を図解付きで詳述します。インデックスが0から始まることや、マイナスインデックスの活用法など、つまずきやすいポイントも丁寧にフォローしています。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

はじめに

Pythonプログラミングにおいて、文字列の操作は避けて通れない基本的なスキルです。文字列は、私たちの身の回りにあるテキストデータをプログラムで扱うための重要な要素です。例えば、ユーザーが入力した名前を挨拶文に組み込んだり、長い文章から特定の単語を探し出したり、データの一部を書き換えたりと、その用途は多岐にわたります。

このステップ6では、文字列を自在に操るための基本的なテクニックである「文字を足す(連結)」ことと、「文字を取り出す(スライス)」ことに焦点を当てて、図解を交えながら分かりやすく解説していきます。


文字列とは? – 文字の集合体

まず、文字列がどのようなものかを改めて確認しましょう。Pythonにおいて文字列は、文字(character)が順番に並んだ**シーケンス(sequence)**として扱われます。これは、たくさんの車両が連結された電車をイメージすると理解しやすいでしょう。各車両にはそれぞれ文字が一つずつ入っており、それらが一列に連なって一つの「文字列」という電車を形成しています。

graph TD
    subgraph "文字列 'Python'"
        P["P (0)"] --- Y["Y (1)"] --- T["T (2)"] --- H["H (3)"] --- O["O (4)"] --- N["N (5)"]
    end

この図のように、文字列 'Python' は 'P', 'y', 't', 'h', 'o', 'n' という6つの文字(車両)が順番に並んでいます。そして、それぞれの文字には「インデックス(index)」と呼ばれる、車両番号のような一意の番号が 0 から順に割り振られています。このインデックスが、後で特定の文字を取り出す際に非常に重要な役割を果たします。


文字列を足す(連結)

文字列の操作で最も基本的なのが、複数の文字列を一つにつなぎ合わせる「連結(concatenation)」です。これは、別々の電車を連結して一本の長い電車にする作業に似ています。Pythonでは、+ 演算子を使うことで簡単に文字列を連結できます。

+ 演算子による連結

+ 演算子は、数値の計算では足し算を意味しますが、文字列に対して使うと、それらを単純に結合します。

例:

str1 = "こんにちは"
str2 = "世界"
greeting = str1 + str2
print(greeting)

実行結果:

こんにちは世界

この例では、str1 という電車と str2 という電車を + で連結し、greeting という新しい一本の長い電車を作っています。

graph TD
    subgraph "str1: 'こんにちは'"
        A["こ"] --- B["ん"] --- C["に"] --- D["ち"] --- E["は"]
    end

    subgraph "str2: '世界'"
        F["世"] --- G["界"]
    end

    subgraph "greeting = str1 + str2"
        A2["こ"] --- B2["ん"] --- C2["に"] --- D2["ち"] --- E2["は"] --- F2["世"] --- G2["界"]
    end

    str1 -- " " --> greeting
    str2 -- " " --> greeting

間にスペースや他の文字を入れたい場合は、それらも文字列として連結します。

例:

first_name = "山田"
last_name = "太郎"
full_name = first_name + " " + last_name
print(full_name)

実行結果:

山田 太郎

* 演算子による繰り返しの連結

同じ文字列を複数回繰り返したい場合は、* 演算子が便利です。数値の掛け算のように、指定した回数だけ文字列を繰り返して連結します。

例:

line = "-" * 20
print(line)

laugh = "ha" * 3
print(laugh)

実行結果:

--------------------
hahaha

これは、同じデザインの車両をたくさん連結して、長い一本の電車を作るイメージです。


文字列から文字を取り出す

文字列という長い電車から、特定の車両(文字)や、ある区間の車両群(部分文字列)を取り出す方法を見ていきましょう。ここで活躍するのが、先ほど説明したインデックスです。

インデックスを使った1文字の取り出し

文字列内の特定の位置にある1文字にアクセスするには、文字列の後に [] をつけ、その中に取り出したい文字のインデックス番号を指定します。

文字列: 'Python'

graph TD
    subgraph "インデックス"
        direction LR
        P["'P'<br>(0)"] --- Y["'y'<br>(1)"] --- T["'t'<br>(2)"] --- H["'h'<br>(3)"] --- O["'o'<br>(4)"] --- N["'n'<br>(5)"]
    end

例:

my_str = "Python"

# 最初の文字を取り出す (インデックス 0)
char1 = my_str[0]
print(f"最初の文字: {char1}")

# 4番目の文字を取り出す (インデックス 3)
char4 = my_str[3]
print(f"4番目の文字: {char4}")

実行結果:

最初の文字: P
4番目の文字: h

ポイント:インデックスは 0 から始まる プログラミングの多くの場面で、順番は 1 からではなく 0 から数え始めます。これは非常に重要なルールなので、しっかりと覚えておきましょう。

マイナスのインデックス

Pythonの便利な機能として、インデックスにマイナスの値を指定することもできます。-1 は末尾の文字、-2 は末尾から2番目の文字を指します。これにより、文字列の最後から簡単に文字を取り出すことができます。

文字列: 'Python'

graph TD
    subgraph "負のインデックス"
        direction LR
        P["'P'<br>(-6)"] --- Y["'y'<br>(-5)"] --- T["'t'<br>(-4)"] --- H["'h'<br>(-3)"] --- O["'o'<br>(-2)"] --- N["'n'<br>(-1)"]
    end

例:

my_str = "Python"

# 最後の文字を取り出す
last_char = my_str[-1]
print(f"最後の文字: {last_char}")

# 最後から3番目の文字を取り出す
third_from_end = my_str[-3]
print(f"最後から3番目の文字: {third_from_end}")

実行結果:

最後の文字: n
最後から3番目の文字: h

スライスを使った部分文字列の取り出し

1文字だけでなく、ある範囲の連続した文字(部分文字列)をまとめて取り出したい場合は、「スライス(slice)」という機能を使います。[開始インデックス:終了インデックス] のようにコロン : で区切って範囲を指定します。

my_str[start:end]

  • start: 取り出しを開始する位置のインデックス(このインデックスの文字は含まれる)
  • end: 取り出しを終了する位置のインデックス(このインデックスの文字は含まれない

これがスライスを理解する上で最も重要なポイントです。「start から end の一つ手前まで」と覚えましょう。

文字列: 'Python Programming'

例: my_str[0:6] の場合

graph TD
    subgraph "文字列 'Python Programming'"
        P0["P<br>0"] --- y1["y<br>1"] --- t2["t<br>2"] --- h3["h<br>3"] --- o4["o<br>4"] --- n5["n<br>5"] --- S6[" <br>6"] --- P7["P<br>7"] --- ...
    end
    subgraph "スライス my_str[0:6]"
        style P0 fill:#9f9,stroke:#333,stroke-width:2px
        style y1 fill:#9f9,stroke:#333,stroke-width:2px
        style t2 fill:#9f9,stroke:#333,stroke-width:2px
        style h3 fill:#9f9,stroke:#333,stroke-width:2px
        style o4 fill:#9f9,stroke:#333,stroke-width:2px
        style n5 fill:#9f9,stroke:#333,stroke-width:2px
        P0_copy["P"] --- y1_copy["y"] --- t2_copy["t"] --- h3_copy["h"] --- o4_copy["o"] --- n5_copy["n"]
    end

    S6 -- "終了インデックス(6)は含まれない" --> P0_copy

コード例:

my_str = "Python Programming"

# インデックス 0 から 5 までを取り出す (終了インデックス 6 は含まない)
sub1 = my_str[0:6]
print(f"my_str[0:6] -> '{sub1}'")

# インデックス 7 から 17 までを取り出す
sub2 = my_str[7:18] # 終了インデックスは文字数より大きくてもOK
print(f"my_str[7:18] -> '{sub2}'")

実行結果:

my_str[0:6] -> 'Python'
my_str[7:18] -> 'Programming'

スライスの省略形

スライスでは、開始インデックスや終了インデックスを省略することができます。

  • [:end]: 文字列の最初から end の一つ手前まで
  • [start:]: start から文字列の最後まで
  • [:]: 文字列全体のコピー

例:

my_str = "Python Programming"

# 最初からインデックス 5 まで
first_part = my_str[:6]
print(f"my_str[:6] -> '{first_part}'")

# インデックス 7 から最後まで
second_part = my_str[7:]
print(f"my_str[7:] -> '{second_part}'")

# 全てのコピー
all_copy = my_str[:]
print(f"my_str[:] -> '{all_copy}'")

実行結果:

my_str[:6] -> 'Python'
my_str[7:] -> 'Programming'
my_str[:] -> 'Python Programming'

ステップ付きスライス

スライスには、3つ目の値として「ステップ(step)」を指定することもできます。[start:end:step] の形式で、step ごとに文字を飛び飛びに取り出します。

例:

numbers = "0123456789"

# 2つおきに文字を取り出す (偶数)
even_numbers = numbers[0:10:2] # numbers[::2] とも書ける
print(f"偶数: {even_numbers}")

# 文字列を逆順にする
reversed_numbers = numbers[::-1]
print(f"逆順: {reversed_numbers}")

実行結果:

偶数: 02468
逆順: 9876543210

[::-1] は、文字列を簡単に逆順にするためのイディオム(慣用句)としてよく使われます。


まとめ

今回は、Pythonにおける文字列操作の基本である「連結(文字を足す)」と「インデックス・スライス(文字を取り出す)」について学習しました。

  • 文字列は文字が順番に並んだシーケンスであり、各文字には 0 から始まるインデックスが付いている。
  • 連結: + 演算子で文字列同士を繋げることができる。* 演算子で文字列を繰り返すことができる。
  • インデックス指定: [インデックス] で特定の位置にある1文字を取り出せる。マイナスのインデックスは末尾から数える。
  • スライス: [開始:終了]部分文字列を取り出せる。終了インデックスの文字は含まれない点に注意。
  • ステップ付きスライス: [開始:終了:ステップ] で飛び飛びに文字を取り出せる。[::-1] で文字列を逆順にできる。

これらの基本的な操作をマスターすることは、テキストデータを自由に加工し、より高度なプログラムを作成するための第一歩です。まずは簡単な文字列で、連結したり、色々な部分を取り出したりして、その動きに慣れていきましょう。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

-プログラミング