概要
よく忘れるので自分用にメモメモ。
pythonの組み込み関数に slice
というのがあります。
名前の通り、指定された範囲のスライスを表すオブジェクトを作ってくれます。
通常だと
l = list(range(10)) print(l[2:4])
と記述するところを
l = list(range(10)) from_two_to_four = slice(2, 4) print(l[from_two_to_four])
と出来ます。なにげにシーケンスの添字指定って
分かりづらいときがおおいので、名前を付けて指定できるのは
分かりやすくて好きです。
サンプル
# coding: utf-8 """ slice 関数についてのサンプルです。 """ import itertools from trypython.common.commoncls import SampleBase class Sample(SampleBase): def exec(self): ############################################################# # slice 関数 # - https://docs.python.jp/3/library/functions.html#slice # # slice 関数は、インデックスの集合を表すオブジェクトを生成し返す. # 取得した slice オブジェクトはシーケンスの添字として利用できる. ############################################################# l = list(range(10)) # インデックス2番目から4番目までの要素を取得 print(l[2:4]) # slice オブジェクト取得 # 生成した slice オブジェクトはシーケンスの添字として利用可能 # 名前が付けられるので、sequence[x:y:z]とするよりわかりやすい from_two_to_four = slice(2, 4) print(type(from_two_to_four)) print(l[from_two_to_four]) print('helloworld'[from_two_to_four]) # slice 関数に渡す引数は、前から start, stop, step となっている step_two = slice(None, None, 2) print('helloworld'[step_two]) # イテレータに対しては、itertools.islice を使う it = iter(l) iter_from_two_to_end_step_two = itertools.islice(it, 0, None, 2) print([x for x in iter_from_two_to_end_step_two]) def go(): obj = Sample() obj.exec() if __name__ == '__main__': go()
結果は以下のようになります。
[2, 3] <class 'slice'> [2, 3] ll hlool [0, 2, 4, 6, 8]
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場