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[0:5:2]
スポンサーリンク