0から学ぶ【Python基礎】

Pythonで文字列の操作方法を解説(len・抽出・結合)

前のページ|次のページ

5章では、Pythonにおける文字列の扱いと操作について解説します。

「文字数を数える」、「文字列から指定した位置(インデックス)にある文字を取り出す」、「文字列の結合」の方法を解説しています。

本連載講座【Python 基礎編】では、「プログラミング未経験の方」が挫折せずにPythonの基礎を学ぶことができます。

プログラミングを始めて学ぶ方が理解できるよう、丁寧に解説しています。

さらに、学んだ内容を身につけるための演習問題も用意しています。

・Pythonを挫折せずに学習したい

・無料でPythonを確実に習得したい

このような考えを持っている方は、Tech Teacherが運営する【Python 基礎編】を用いて、Pythonの学習をすることをお勧めします!

<目次>

1章:Pythonの特徴・概要
2章:環境構築と基本操作
3章:出力関数print()
4章:数値の型(int、float)と算術演算子
5章:文字列の操作(len・抽出・結合)
6章:真偽値(True・False)・論理演算(AND、OR、NOT)・比較演算子
7章:変数
8章:if文による条件分岐
9章:リストと辞書
10章:for・whileによる繰り返し(ループ)処理
11章:関数の作り方・使い方
12章:クラスとモジュール

文字列の扱い

文字列の復習

3章でも説明しましたが、Pythonでは数値と文字列が区別されます。

Pythonにおいて文字列はシングルクォーテーション(‘)またはダブルクォーテーション(“)で両端を囲む必要があります。

ここまでが3章の復習です。
では、文字列についてもう少し詳しく学習していきましょう。

文字列の型

Pythonでは、文字列はstr型(stringの略)として扱われます。type()で確認してみましょう。

print(type('Hello, world!'))
<class 'str'>

また、文字列と数値を相互変換することもでき、str()で数値を文字列に、int()またはfloat()で文字列を数値に変換できます。

print(type(str(123)))
print(type(int('123')))
print(type(float('123')))
<class 'str'>
<class 'int'>
<class 'float'>

文字列の長さ

文字列の長さはlen()で取得できます。

print(len('あいうえお'))
print(len('a b c '))
print(len(''))
print(type(''))
5
6
0
<class 'str'>

プログラムから分かる通り、半角の空白も1文字として数えられます。(全角の空白は使わないようにしましょう。)

また、クォーテーションの間に何も書かない場合、長さ0の文字列として扱われます。

これはprint関数で改行されるのを回避するために使われたりします。

# 以下のように書くと、print関数で改行が行われない
print('改行', end = '')
print('されない')
改行されない

文字列の操作

文字列とインデックス

文字列の各文字には順番に番号が振られており、その番号をインデックスと呼びます。

インデックスは左の文字から順に振られ、0から始まります。

[]を用いて文字列のインデックスを指定することで、各文字を取り出すことができます。

print('abcde'[0])
print('abcde'[2])
print('abcde'[4])
a
c
e

n番目の文字を取得するにはインデックスとしてn-1を指定する必要があります。(先頭のインデックスが0のため)

文字列の長さ以上のインデックスを指定するとエラーになります。

また、インデックスとして負数を指定することもできます。

この場合、末尾のインデックスが-1となり、末尾から先頭にかけて-1, -2, -3…と続いていきます。

print('abcde'[-1])
print('abcde'[-4])
e
b

インデックスについてまとめると、以下の表のようになります。

Python リスト インデックス

文字列のスライス

ここでは文字列の一部分だけを取り出す方法を解説します。

文字列の一部を取り出すには、スライスという機能を使います。

# 3~5文字目までを取得
print('abcdefg'[2:5])

# 5文字目を取得
print('abcdefg'[4:5])

# 2文字目から末尾まで取得
print('abcdefg'[1:])

# 先頭から4文字目までを取得
print('abcdefg'[:4])
cde
e
bcdefg
abcd

文字列のスライスでは、取得したい部分の最初のインデックスと、最後のインデックスに1を加えた値を指定します。(ややこしいですが、間違えないようにしましょう)

例えば[3:8]を指定すると、文字列の先頭から4文字目(インデックスは3)~8文字目(インデックスは7)までが取り出せます。

数字を省略すると、先頭もしくは末尾まで取り出されます。

また、負数を指定して末尾からのインデックスで取り出すことができます。

# 末尾から5文字目~末尾から2文字目までを取り出す
# [-1:-5]としないように注意
print('abcdedefg'[-5:-1])
edef

さらに、3番目の値を指定することで、何個かおきに文字を取り出すことができます。

# 3文字目から7文字目を1文字おきに取り出す
print('abcdefg'[2:7:2])
ceg

3番目の値に負数を指定すると、逆向きに取り出せます。

# 7文字目から4文字目に向かって取り出す
print('abcdefg'[7:2:-1])

# 7文字目から4文字目に向かって1文字おきに取り出す
print('abcdefg'[7:2:-2])
gfed
ge

スライスの仕方が複雑になるとインデックスの扱いが非常に分かりづらくなるので、間違えないように注意しましょう。

文字列の結合

文字列どうしは、『+』演算子で結合することができます。

ただし、文字列と数値は結合できないので注意しましょう。

print('Hello, ' + 'world' + '!')
print('私の年齢は' + str(30) + '歳です。')
Hello, world!
私の年齢は30歳です。

また、『*』演算子を用いると同じ文字列を複数回繰り返すような文字列を作ることができます。

print('abc' * 3)
abcabcabc

5章の練習問題

以下の練習問題を解いてみましょう。

練習問題

問1. 以下のプログラムをそれぞれ書いてください。

(1) int型の数値256str型に変換し、出力するプログラム
(2) 文字列'12345'float型に変換し、出力するプログラム
(3) 文字列'Hello, world!'長さを取得し、出力するプログラム

問2. 以下のプログラムをそれぞれ書いてください。

(1) 文字列 'abcde'先頭から3文字目を取り出すプログラム
(2) 文字列 'Hello, world!'最初の5文字をスライスして出力するプログラム
(3) 文字列 'Python Programming'3番目から6番目までの文字をスライスして出力するプログラム
(4) 文字列 'Python'最後の3文字をスライスして出力するプログラム
(5) 文字列 'abcdefg'逆順にして出力するプログラム

解答

問1(クリックして解答を表示)

# (1)
print(str(256))

# (2)
print(float('12345'))

# (3)
print(len('Hello, world!'))
256
12345.0
13

問2(クリックして解答を表示)

# (1)
print('abcde'[2])

# (2)
print('Hello, world!'[:5])

# (3)
print('Python Programming'[2:6])

# (4)
print('Python'[-3:])
# [3:]でも可

# (5)
print('abcdefg'[::-1])
c
Hello
thon
hon
gfedcba


次のページへ

Pythonの真偽値(True・False)と論理演算を完全理解! 前のページ|次のページ 6章では、Pythonにおける真理値(bool型)と論理演算子、比較演算子について解説します。 True...