文字列 文法・環境

【python】スライスを用いて文字列の一部を取得【後ろから指定など】

pythonの文字列の "スライス" に関する内容について、紹介します。

本記事では、以下の内容を紹介しています。

この記事で分かること

  • 文字列のスライスの基本的な使い方
  • 後ろから指定する方法【インデックスをマイナス指定】
  • 文字列を代入・置換する方法(スライスではできないので代わりの方法を紹介)
  • 【補足】スライスはリストにも使用できる
  • 【補足】スライスはデータフレームにも使用できる

スポンサーリンク

文字列のスライスの基本的な使い方

pythonの文字列における、スライスの使い方について紹介します。

スライスにより、指定した範囲の文字列を抽出することができます。

Pythonの公式ドキュメントに、 "文字列のスライスの覚え方" が紹介されています。

なかなか分かりやすい覚え方なので、この例を用いてスライスの使い方を紹介します。

文字列のスライスの覚え方

上図のように、インデックスは要素の境界部にあると覚えておくと、スライスが使いやすくなります。

以下、サンプルコードです。

### 文字列のスライスの基本的な使い方
string = 'Python'

print(string[1:3])
# yt

print(string[2:6])
# thon

前述の覚え方のインデックスどおり、指定した文字列が抜き出せています。

範囲外のインデックスを指定してもエラーは発生しない

スライスでは、文字列の範囲外のインデックスを指定した場合でも、エラーは発生しません

以下のサンプルコードでは、文字列の範囲外のインデックスを指定しています。

### 範囲外を指定しても、エラーは発生しない
string = 'Python'

print(string[2:10])
# thon

print(string[10:12])
# 空白文字

文字列の範囲外のインデックスを指定した場合でも、エラーは発生しません。

> print(string[2:10])

文字列の最後尾「6」より大きなインデックスを指定しています。
この場合は、最後尾の文字列まで抽出されます。

> print(string[10:12])

開始インデックス / 終了インデックスともに、最後尾よりも大きいインデックスを指定した場合は、空白文字となります。

開始/終了のインデックスは省略可能

開始のインデックスと、終了のインデックスは省略可能です。

以下、サンプルコードです。

### 開始 / 終了のインデックスは省略可能
string = 'Python'

print(string[:2])
# Py

print(string[2:])
# thon

print(string[:])
# Python

> print(string[:2])

開始インデックスを省略した場合は、先頭のインデックスを指定したことになります。

> print(string[2:])

終了インデックスを省略した場合は、最後尾のインデックスを指定したことになります。

文字列のスライスでステップ数を指定

スライスでは、開始 / 終了インデックスのほかに、ステップ数を指定することもできます

以下、サンプルコードです。

### スライスのステップ数を指定
string = 'Python'

print(string[0:6:2])
# Pto

print(string[1:6:2])
# yhn

> print(string[0:6:2])

開始インデックス : 0 から 終了インデックス : 6 の間の要素から、2ステップごとに文字列を取得しています。

> print(string[1:6:2])

開始インデックス : 1 から 終了インデックス : 6 の間の要素から、2ステップごとに文字列を取得しています。

スポンサーリンク

文字列のスライスを後ろから指定する方法【マイナス指定】

文字列のスライスを、後ろから指定する方法を紹介します。

前述のスライスの覚え方を再掲します。

文字列のスライスの覚え方

インデックスが要素の境界部にあるという覚え方は、文字列を後ろからスライスする場合も有効です。

以下、サンプルコードです。

### インデックスのマイナス指定で後ろから抽出
string = 'Python'

print(string[-1])
# n

print(string[-5:-1])
# ytho

print(string[-1:-5])
# 空白文字

print(string[0:-1])
# Pytho

> print(string[-5:-1])

開始インデックス : -5 から 終了インデックス : -1 までの文字列を取得しています。

> print(string[-1:-5])

開始インデックス : -1 から 終了インデックス : -5 の場合は、開始と終了が逆転してしまっているため、空白文字となります。

> print(string[0:-1])

正のインデックスと、負のインデックスを混ぜて使用することもできます。
開始インデックス : 0 から 終了インデックス : -1までの文字列を取得しています。

スライスを用いて、文字列を逆順に並び替え

スライスを用いて、文字列を逆順に並び替える方法を紹介します。

ステップ数を指定する箇所を "-1" とすることで、文字列を逆順で表示できます。

以下、サンプルコードです。

### スライスを用いて、文字列を逆順に並び替え
string = 'Python'

print(string[::-1])
# nohtyP

スポンサーリンク

文字列を代入・置換する(スライスの代わりの方法を紹介)

文字列はイミュータブル(変更不可)なので、代入や置換はできません

スライスを用いて文字列を置換しようとすると、エラーとなります。

### 文字列はイミュータブルなので置換できない。
string = 'Python'

string[1:3] = '12'
# TypeError: 'str' object does not support item assignment

スライスでは、文字列の代入・置換はできません。

補足的な内容になりますが、文字列の挿入・置換をする方法を2つ紹介します。

  • 文字列をリストに変換してから置換する方法
  • replaceメソッドを用いて文字列を置換する方法

【補足】文字列をリストに変換してから置換

文字列の一部を置換する方法として、文字列をリストに変換してから置換する方法について紹介します。

list( )関数を用いて、文字列をリストに変換した後に、リストの要素を置換します。

文字列のjoinメソッドを用いることで、リストを文字列に変換できます。

以下、サンプルコードです。

### 文字列をリストに変換してから置換
string = 'Python'

l_string = list(string)

l_string[1:3] = '12'
print(l_string)
#['P', '1', '2', 'h', 'o', 'n']

print(''.join(l_string))
# P12hon

> l_string = list(string)

list( )関数を用いて、文字列をリストに変換しています。

> l_string[1:3] = '12'

リストの要素を置換しています。

> print(''.join(l_string))

文字列のjoinメソッドを用いて、リストを文字列に変換しています。
joinメソッドのドットの前の ''. は、リストを結合する際に区切り文字を指定します。
今回は区切り文字に何も指定していないので、リストの要素がそのまま結合された文字列になります。

【補足】replaceメソッドを用いて文字列を置換

文字列の一部を置換する方法として、文字列のreplaceメソッドを使用する方法について紹介します。

replaceメソッドの第1引数に置換文字列、第2引数に置換文字列を指定します。

以下、サンプルコードです。

### replaceメソッドを用いて置換
string = 'Python'

print(string.replace('yt', '12'))
# P12hon

print(string)
# Python

> print(string.replace('yt', '12'))
> # P12hon

replaceメソッドで文字列が置換できています。

> print(string)
> # Python

もとの文字列自体が変更されるわけではないので、注意してください。

スポンサーリンク

【補足】スライスはリスト(list)にも使用できる

補足的な内容ですが、リストのスライスについて紹介します

リストでもスライスが使用できます。

スライスの指定方法は、文字列の場合と同様です。

以下、サンプルコードです。

### リストにてスライスを使用
l_test = list(range(0,10))
print(l_test)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l_test[2:5])
# [2, 3, 4]

print(l_test[2:])
# [2, 3, 4, 5, 6, 7, 8, 9]

print(l_test[:2])
# [0, 1]

print(l_test[2::2])
# [2, 4, 6, 8]

リストのスライスについては、下記の記事で紹介しています。

リストのスライスの使い方

【補足】スライスはデータフレーム(dataframe)にも使用できる

補足的な内容ですが、データフレームのスライスについて紹介します

データフレームでもスライスが使用できます。

スライスの指定方法は、文字列の場合と同様です。

以下、サンプルコードです。

### データフレームにてスライスを使用
import numpy as np
import pandas as pd

data = {'Fruits':['Apple', 'Lemon', 'Peach', 'Banana', 'Grape'],
        'Prices':[100, 150, 300, 200, 500]}

df = pd.DataFrame(data = data)
df
作成したデータフレーム
### データフレームにてスライスを使用
df[1:3]
df[1:3]
### データフレームにてスライスを使用
df[0:5:2]
df[0:5:2]

スポンサーリンク

-文字列, 文法・環境
-,