Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの文字列操作入門|作成・インデックス・スライス・フォーマットの基本をわかりやすく解説

文字列はPythonにおける最も基本的なデータ型のひとつです。英字・数字・記号など、任意の文字を組み合わせたものが文字列として扱われます。このチュートリアルでは、文字列の作成方法から、インデックスやスライスによる操作、フォーマットの使い方まで、さまざまな場面で役立つ基本操作を体系的に解説します。

Pythonで新しい文字列を作成する

Pythonで文字列を作成するのはとても簡単です。シングルクォート(')またはダブルクォート(")で文字の並びを囲むだけで宣言できます。また、複数行にわたる長い文字列を作りたい場合は、トリプルクォート(''' または """)を使用します。

double_quotes = "My name is John!"

single_quotes = 'My name is John!'

multi_line_string = '''1. My name is John!
                       2. I am a programmer'''

文字列のインデックス

Pythonの文字列に含まれる各文字には、整数のインデックス(番号)が割り当てられています。インデックスは先頭の文字が「0」から始まり、末尾に向かって1ずつ増えていきます。個々の文字のインデックスを指定することで、その文字を取り出すことができます。

myPet = "Dog not a cat"

myPet[0]   # 'D'
myPet[5]   # 'o'
myPet[7]   # ' '
myPet[12]  # 't'
# myPet[15] # IndexError

なお、最後の文字のインデックスを超える位置にアクセスしようとすると、IndexErrorが発生します。

また、負のインデックスを使って文字にアクセスすることも可能です。この場合、末尾の文字が「-1」から始まり、先頭に向かって-1ずつ減少していきます。

myPet = "Dog not a cat"

myPet[-1]  # 't'
myPet[-6]  # ' '
myPet[-8]  # 'o'
myPet[-13] # 'D'

文字列のスライス

スライスとは、文字列の一部(部分文字列)を切り出す手法のことです。文字列のインデックスを利用して実現します。

myPet = "Dog not a cat"

myPet[5:7]  # 'ot'
myPet[1:12] # 'og not a ca'

上記のように、開始インデックスと終了インデックスをコロン(:)で区切って指定します。切り出される部分文字列は「開始インデックスの文字」から「終了インデックスの直前の文字」までとなり、終了インデックスの位置にある文字は含まれない点に注意してください。

開始インデックスを省略した場合は文字列の先頭から、終了インデックスを省略した場合は文字列の末尾(その文字を含む)までが切り出されます。

myPet = "Dog not a cat"

myPet[:7]  # 'Dog not'
myPet[10:] # 'cat'
myPet[:]   # 'Dog not a cat'

スライスのインデックスには、負の値を指定することもできます。

myPet = "Dog not a cat"

myPet[10:-1] # 'ca'

文字列の長さを取得する

組み込み関数のlen()を使うと、文字列の長さ(文字数)を取得できます。

myPet = "Dog not a cat"
len(myPet) # 13

文字列を反復処理する

forループを使えば、文字列内の各文字を順番に取り出して処理できます。

例:

name = "John"
for char in name:
    print(char)
# 'J', 'o', 'h', 'n'

文字列の連結

文字列の連結とは、2つ以上の文字列をつなげて1つの文字列にすることです。Pythonには複数の連結方法があります。

まずは+演算子を使う方法です。

str1 = 'Hello'
str2 = 'World'
concat_str = str1 + str2       # 'HelloWorld'
concat_str = str1 + ' ' + str2 # 'Hello World'

*演算子を使うと、同じ文字列を任意の回数だけ繰り返して連結できます。

concat_str = str1*3 # 'HelloHelloHello'

もうひとつの方法がjoin()メソッドです。組み込みのjoin()メソッドは、共通の区切り文字を使って文字列のリストを連結します。

arr = [str1, str2]
concat_str = (' ').join(arr) # 'Hello World'
concat_str = (',').join(arr) # 'Hello,World'

上記のコードでは、最初のjoin()メソッドがリスト内の各単語の間に半角スペースを挿入し、2つ目のjoin()メソッドがカンマを挿入しています。

文字列と整数の連結

Pythonでは文字列と整数を連結することもできますが、+演算子は直接使えません。次のようなコードを実行すると:

name = "John"
age = 35

print(name + age)

以下のエラーが発生します。

Traceback (most recent call last):
  File "concat.py", line 5, in <module>
    print(name + age)
TypeError: can only concatenate str (not "int") to str

注意: +演算子では文字列と整数を直接連結できません。

このエラーを回避するには、str()メソッドで整数を文字列に変換してから連結します。

name = "John "
age = 35

print(name + str(age)) # John 35

文字列を分割する

組み込みのsplit()メソッドを使うと、1つの文字列を文字列のリストに分割できます。

string = "My name is John"
split_arr = string.split(' ') # ['My', 'name', 'is', 'John']

区切り文字を指定して分割することも可能です。

string = "John, Rose, Jack, Mary"
split_arr = string.split(', ') # ['John', 'Rose', 'Jack', 'Mary']

strip()で空白を削除する

組み込みの文字列メソッドstrip()は、文字列の先頭と末尾にある空白文字を削除します。

string = "    Hello,    World    "
stripped_str = string.strip() # 'Hello,    World'

ご覧のとおり、strip()が削除するのは両端の空白のみで、文字と文字の間にある空白はそのまま残ります。

strip()には、左側のみを削除するバリエーションと右側のみを削除するバリエーションの2種類があります。

  • lstrip():左側の空白を削除
  • rstrip():右側の空白を削除

例:

lstripped_str = string.lstrip() # 'Hello,    World    '
rstripped_str = string.rstrip() # '    Hello,    World'

これらのメソッドは、ユーザー入力を読み込む際に、余分な空白が混入しがちなケースで特に便利です。

文字列をフォーマットする

Pythonのformat()メソッドを使うと、文字列を整形できます。フォーマット対象の文字列内に波括弧{}をプレースホルダーとして配置し、そこがformat()メソッドに渡した引数で置き換えられます。

例:

"Hello, {}".format('John') # 'Hello, John'

上記の例では、{}が'John'に置き換えられています。

波括弧は複数使用でき、引数は波括弧内に位置インデックスを明示しない場合は指定順に、明示した場合はその順序に従って埋め込まれます。

例:

"I have a {}, {}, and a {}".format('dog', 'cat', 'rabbit') # 'I have a dog, cat, and a rabbit'
"I have a {1}, {0}, and a {2}".format('dog', 'cat', 'rabbit') # 'I have a cat, dog, and a rabbit'

インデックスの代わりにキーワード引数を渡すこともできます。その場合、波括弧内にキーワード名を記述します。

例:

print("{friend} is my friend and {enemy} is my enemy".format(friend="John", enemy="Jack"))
# 'John is my friend and Jack is my enemy'

format()メソッドは非常に柔軟で、多彩な用途に活用できます。その他の応用例をいくつか紹介します。

arr = [3, 5]
'I have {0[0]} dogs and {0[1]} cats'.format(arr)
# 'I have 3 dogs and 5 cats'

# 数値を別の基数表記に変換
"int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
# 'int: 42;  hex: 2a;  oct: 52;  bin: 101010'

文字列を小文字に変換する

Pythonのlower()メソッドを使うと、文字列をすべて小文字に変換できます。

例:

string = "Hello, World!"
string.lower() # 'hello, world!'

文字列を大文字に変換する

同様に、upper()メソッドを使うと、文字列をすべて大文字に変換できます。

例:

string = "Hello, World!"
string.upper() # 'HELLO, WORLD!'

まとめ

このチュートリアルを通じて、Pythonの文字列の基本概念と、文字列操作に使えるさまざまなメソッドの使い方をご理解いただけたかと思います。まずは実際にコードを書きながら、インデックス・スライス・フォーマットなどの操作に慣れていきましょう。

参考:Python公式ドキュメント(文字列型)

  1. Pythonで文字列の最後の単語の長さを求める方法

    文字列の中で最後の単語の長さを求めたい場合、まず文字列から余分な空白を取り除き、先頭から1文字ずつ走査するメソッドを定義します。走査を進めながら単語の長さを数え、最終的に最後の単語の長さを結果として返します。サンプルコード以下に具体的な実装例を示します。def last_word_length(my_string): init_val = 0 processed_str = my_string.strip() for i in range(len(processed_str)): if processed_str[i] == : init_

  2. リスト内の文字列を検索するPythonプログラム

    リストの中に特定の文字列が含まれているかどうかを確認したい場合、Pythonではシンプルな「if」文と「in」演算子を組み合わせるだけで簡単に実現できます。追加のライブラリや複雑なロジックは不要です。 サンプルコード 以下に具体的な実装例を示します。 my_list = [4, 3.0, python, is, fun] print(The list is :) print(my_list) key = fun print(The key is :) print(key) print(The result is :) if key in my_list: print(The key