Pythonの高度な特性——スライス(Slice)
7012 ワード
廖雪峰のウェブサイトを抜粋します
リストを定義します.
最初の3つの要素を取ります.
この方法は少し愚かです.もし要素が非常に多いなら、前のN要素を取る必要があります.どうすればいいですか.
ループを使うことを考えるかもしれません.
しかし、このような頻繁によく用いられる操作手段は、基本的にすべての言語で簡単な操作方法を提供するものであり、Substring法(通称サブストリング)のようなものであり、pythonも同様の方法を提供するものであり、これがスライス(Slice)である.
例:
なお、L[0:3]は、インデックス0から、インデックス3が分かるまでを表すが、インデックス3、すなわちインデックス0,1,2は含まない.
最初のインデックスが0の場合は、省略することもできます.
任意のインデックスから開始することもできます.
試してみることもできます.
Pythonも逆数取りL[-1]をサポートしているので、逆数スライスをサポートしているかどうかを見てみましょう.(逆数の最初のインデックスは-1です)
まだ満足していないと感じたら、続けてみてください.
tupleもスライス特性をサポートしていますが、結果もtupleです.
文字列を見てみましょう.
文字列もスライスをサポートしますが、結果も文字列です.
もう1つの例を見てみましょう.
スライス機能を使用して、Pythonのstrip()機能のような関数trim(str)を作成します.文字列の先頭と末尾のスペースを除去します.
リストを定義します.
L = ['haha','xixi','hehe','heihei','gaga']
最初の3つの要素を取ります.
>>> L[0],L[1],L[2]
('haha', 'xixi', 'hehe')
この方法は少し愚かです.もし要素が非常に多いなら、前のN要素を取る必要があります.どうすればいいですか.
ループを使うことを考えるかもしれません.
>>> r=[]
>>> n = 3
>>> for i in range(n):
... r.append(L[i])
...
>>> r
['haha', 'xixi', 'hehe']
しかし、このような頻繁によく用いられる操作手段は、基本的にすべての言語で簡単な操作方法を提供するものであり、Substring法(通称サブストリング)のようなものであり、pythonも同様の方法を提供するものであり、これがスライス(Slice)である.
例:
>>> L[0:3]
['haha', 'xixi', 'hehe']
なお、L[0:3]は、インデックス0から、インデックス3が分かるまでを表すが、インデックス3、すなわちインデックス0,1,2は含まない.
最初のインデックスが0の場合は、省略することもできます.
>>> L[:3]
['haha', 'xixi', 'hehe']
任意のインデックスから開始することもできます.
>>> L[1:2]
['xixi']
試してみることもできます.
>>> L[1:1]
[]
Pythonも逆数取りL[-1]をサポートしているので、逆数スライスをサポートしているかどうかを見てみましょう.(逆数の最初のインデックスは-1です)
>>> L[-2:]
['heihei', 'gaga']
>>> L[-3:-2]
['hehe']
まだ満足していないと感じたら、続けてみてください.
>>> m = list(range(100))# range 0-99 , list m
>>> m
[0, 1, 2, 3, 4, 5, 6, ……,99]
>>> m[:10]#
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> m[-10:]#
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> m[10:20]# 11-20
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> m[:10:2]# , 2
[0, 2, 4, 6, 8]
>>> m[5:15:3]# 6-15 , 3
[5, 8, 11, 14]
>>> m[::10]# , 10
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> m[:]# , list
[0, 1, 2, 3, 4, 5, 6, 7,……,99]
tupleもスライス特性をサポートしていますが、結果もtupleです.
>>> n = (1,3,5,7)
>>> n[:3]
(1, 3, 5)
文字列を見てみましょう.
>>> 'abcdefghjklmn'[::2]
'acegjln'
文字列もスライスをサポートしますが、結果も文字列です.
もう1つの例を見てみましょう.
スライス機能を使用して、Pythonのstrip()機能のような関数trim(str)を作成します.文字列の先頭と末尾のスペースを除去します.
>>> def trim(str):
... while str[:1]==' ':
... str = str[1:]
... while str[-1:] == ' ':
... str = str[:-2]
... return str
...
>>> trim(' abc hh welcome! ')
'abc hh welcome!'