はじめに
普段は、Ruby on Railsの学習しており、プログラミング歴も4ヶ月程とまだまだひよっこです。
そんな私ですが、数日前からPython学習も始めました。
今回はその中でも「スライス」についてですが...このスライスよく出現するのですが、なかなか難しく毎回調べてしまいます。
なので、記事を書きながら、復習と自身の頭の中の整理に繋がればと思い投稿させていただいております。
スライス(:)とは
配列の一部を取得できる。
使い方の例
※前と後ろの表現が出てきますが、0の方が前、9の方が後ろになります。
import numpy as np
# こちらのdataをベースに進めていきます
data = np.arange(0, 10)
print(data)
[0 1 2 3 4 5 6 7 8 9] # 0〜9までを配列として取得
#####● :と数字が1つの場合
・[:(数字)]
前から数字の分だけ配列を取得する
・[(数字):]
後ろから数字の分だけ配列を取得する
・[:]
全ての配列を取得する
print(data[:3]) # 前から3つ配列を取得
[0 1 2]
print(data[3:]) # 後ろから3つ配列を取得
[7 8 9]
print(data[:]) # 配列を全て取得
[0 1 2 3 4 5 6 7 8 9]
#####● :と数字が2つの場合
・data[始まり : 終わり]
基本的に始まりの数字はそのままの数値、終わりを指定する数字は1つ手前の数値を表しているようです。
print(data[2:6]) #2から5までの配列を取得(6の1つ手前まで)
[2 3 4 5]
print(data[-6:-2])
#後ろから6番目の数字から3番目の数字まで取得(後ろから数えて2番目の1つ手前(=後ろから3番目まで))
[4 5 6 7]
#####● :が2つと数字が3つの場合
・data[始まり : 終わり : スライスの増分]
※ スライスの増分 = 何個おきに配列を取得するかの指定
print(data[2:7:2]) # 2〜6(7の1つ手前)までの配列を2つおきに取得
[2 4 6]
print(data[-7:-2:2]) # 後ろから数えて7番目から3番目の数字まで取得(後ろから数えて2番目の1つ手前(=後ろから3番目まで))
[3 5 7]
#####● :が2つ連続する場合
・data[::(数字)]
何個おきに配列を取得するかの指定。
正の数であれば前から、負の数であれば後ろから開始する。
・data[(数字1)::(数字2)]
数字1は開始地点の指定。
数字2は何個おきに配列を取得するかの指定。
print(data[::1]) # 1つおきに配列を取得(=全ての配列)
[0 1 2 3 4 5 6 7 8 9]
print(data[::-1]) # 後ろから1つおきに配列を取得(=全ての配列)
[9 8 7 6 5 4 3 2 1 0]
print(data[::2]) # 2つおきに配列を取得
[0 2 4 6 8]
print(data[::-2]) # 後ろから2つおきに配列を取得
[9 7 5 3 1]
print(data[2::2]) # 2から始まり、2つおきに配列を取得
[2 4 6 8]
print(data[-2::-2]) # 後ろから数えて2番目から始まり、2つおきに配列を取得(=2つずつ前に進んでいく)
[8 6 4 2 0]
print(data[6::-2]) # 6から始まり、2つおきに配列を取得(=2つずつ前に進んでいく)
[6 4 2 0]
終わり
今回は以上になります。
私自身もプログラミング初心者ですが、同じ様な立場の方に少しでも参考になれば幸いです。
また、もし内容に誤りなどがございましたら、ご指摘いただけますと幸いです。