1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonのスライスは便利。

Last updated at Posted at 2023-10-15

はじめに

Pythonのスライスは、文字列切り取りや、リストの要素抜き出しに使える。文字検索のrfindも組み合わせればいろいろ分離、抜き出しができて便利。使い方をよく忘れるので備忘録としてまとめる。

目次

基本

開始位置、終了位置、ステップの3値で設定可能。それぞれ省略することも可能。数値は0オリジン。マイナスの値を指定することもできる。ステップをマイナスにした場合、後ろから処理されるのでstart/endの関係が逆になる点注意。

表記 内容
[start : ] 開始位置だけ指定
[ : end] 終了位置だけ指定
[start : end] 開始位置、終了位置指定
[start : end : step] 開始位置、終了位置、ステップ指定
[ : : step] ステップだけ指定
[start : : step] 開始位置、ステップ指定
[ : end : step] 終了位置、ステップ指定
slice.py
#  +---+---+---+---+---+---+---+---+---+---+---+
#  |  0| 10| 20| 30| 40| 50| 60| 70| 80| 90|100|
#  +---+---+---+---+---+---+---+---+---+---+---+
#  | a | b | c | d | e | f | g | h | i | j | k |
#  +---+---+---+---+---+---+---+---+---+---+---+
#  0   1   2   3   4   5   6   7   8   9  10  11
#-11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1

list_slice=[0,10,20,30,40,50,60,70,80,90,100]
str_slice='abcdefghijk'

#5から開始------------
print(list_slice[5:])   #[50, 60, 70, 80, 90, 100]
print(str_slice[5:])    #fghijk

#5で終了--------------
print(list_slice[:5])   #[0, 10, 20, 30, 40]
print(str_slice[:5])    #abcde

#2~8まで-------------
print(list_slice[2:8])  #[20, 30, 40, 50, 60, 70]
print(str_slice[2:8])   #cdefgh

#2~8までステップ2----
print(list_slice[2:8:2])#[20, 40, 60]
print(str_slice[2:8:2]) #ceg

#ステップ2------------
print(list_slice[::2])  #[0, 20, 40, 60, 80, 100]
print(str_slice[::2])   #acegik

#2から開始ステップ2---
print(list_slice[2::2]) #[20, 40, 60, 80, 100]
print(str_slice[2::2])  #cegik

#8までステップ2-------
print(list_slice[:8:2]) #[0, 20, 40, 60]
print(str_slice[:8:2])  #aceg

#2~-2(後ろから2なので9)ステップ2---
print(list_slice[2:-2:2])#[20, 40, 60, 80]
print(str_slice[2:-2:2]) #cegi

#8~2をステップ-1-----
print(list_slice[8:2:-1])#[80, 70, 60, 50, 40, 30]
print(str_slice[8:2:-1]) #ihgfed

戻る

値を代入

スライスを使って、リスト要素を入れ替えることもできる。指定したリスト要素数が指定スライス範囲と一致していれば入れ替え。違う場合は、要素数も変化する点注意。

slice.py
#  +---+---+---+---+---+---+---+---+---+---+---+
#  |  0| 10| 20| 30| 40| 50| 60| 70| 80| 90|100|
#  +---+---+---+---+---+---+---+---+---+---+---+
#  0   1   2   3   4   5   6   7   8   9  10  11
#-11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1

list_slice=[0,10,20,30,40,50,60,70,80,90,100]

#入れ替え10,20,30 の部分をいれかえ
list_slice[1:4]=[100,200,300]
print(list_slice)
# [0, 100, 200, 300, 40, 50, 60, 70, 80, 90, 100]

#10,20,30の部分を0に入れ替える
list_slice[1:4]=[0]
print(list_slice)
# [0, 0, 40, 50, 60, 70, 80, 90, 100]

戻る

文字列入れ替え

スライスを使って、文字列を入れ替えることもできる。

slice.py
#  +---+---+---+---+---+---+---+---+---+---+---+
#  | a | b | c | d | e | f | g | h | i | j | k |
#  +---+---+---+---+---+---+---+---+---+---+---+
#  0   1   2   3   4   5   6   7   8   9  10  11
#-11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1

str_slice='abcdefghijk'
str_replace='CDEFG'

#c ~ str_replace 文字列に入れ替え
str_slice = str_slice[:2] + str_replace + str_slice[2+len(str_replace):]
print(str_slice)
# abCDEFGhijk

戻る

rfind 組み合わせ

開始位置、終了位置をrfindで指定すれば、特定の文字列の位置で区切ることができる。例えば、URLやファイルパスの/\で分離したい場合などに有効。

rfindを使った例。URLの終端と親を分離。

url切り抜き.py
url = 'https://qiita.com/tapitapi/items/d0a1df5f9f74aefa97d3'

#rfindで後ろから検索 終端を抜き出し
reaf = url[url.rfind('/')+1:]
print(reaf)
# d0a1df5f9f74aefa97d3

#rfindで後ろから検索 親部分を抜き出し
tree = url[:url.rfind('/')+1]
print(tree)
# https://qiita.com/tapitapi/items/

rfindを使った例。フォルダパスを1階層ずつ遡って配列に格納。

フォルダパス.py
path='C:\\Users\\USER_NAME\\AppData\\Local\\Programs\\Python\\Python38\\python.exe'
path_list=[]

#pathを1階層ずつ遡ってpath_list[]へ格納
while(path.count('\\')):
	path_list.append(path)
	path=path[:path.rfind('\\')]

print(path_list)
# ['C:\\Users\\USER_NAME\\AppData\\Local\\Programs\\Python\\Python38\\python.exe', 
#  'C:\\Users\\USER_NAME\\AppData\\Local\\Programs\\Python\\Python38', 
#  'C:\\Users\\USER_NAME\\AppData\\Local\\Programs\\Python', 
#  'C:\\Users\\USER_NAME\\AppData\\Local\\Programs', 
#  'C:\\Users\\USER_NAME\\AppData\\Local', 
#  'C:\\Users\\USER_NAME\\AppData', 
#  'C:\\Users\\USER_NAME', 
#  'C:\\Users']

戻る

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?