[Python] range(0, 90, 2)

問題

何が表示されますか?

decimal = range(0, 90, 2)
my_decimal = decimal[::10]
length = len(my_decimal)
print(length)

答え

5 が表示されます。

解説

rangeオブジェクトにはスライスが使えます。

range(0, 90, 2)[::10]と書くと、range(0, 90, 20)という意味になります。

言われてみれば確かに使える気がしてくるので、ドキュメントを読んでみます。

range オブジェクトは collections.abc.Sequence ABC を実装し、包含判定、要素インデックス検索、スライシングのような機能を提供し、負のインデックスをサポートします (シーケンス型 — list, tuple, range を参照):

Python標準ライブラリ 組み込み型 range

バージョン 3.2 以降使うことができます。

バージョン 3.2 で変更: シーケンス ABC を実装。スライスと負のインデックスのサポート。int オブジェクトの帰属判定を、すべてのアイテムをイテレートする代わりに、定数時間で行います。

Python標準ライブラリ 組み込み型 range