01 / 07
まとめて欲しいとき
kudamonos[0] は1つだけ取り出す書きかただった。では「前から3つ」が欲しいときは?
3回書いてもいいけれど、Pythonには範囲を指定してまとめて切り出す書きかたがある。スライス(切り出し)と呼ぶよ。
くり返しとデータの持ち方
INPUT · スライド
01 / 07
kudamonos[0] は1つだけ取り出す書きかただった。では「前から3つ」が欲しいときは?
3回書いてもいいけれど、Pythonには範囲を指定してまとめて切り出す書きかたがある。スライス(切り出し)と呼ぶよ。
02 / 07
角かっこの中に 始まり:終わり と書く。kudamonos[1:3] なら、1番めから3番めの手前までだよ。
返ってくるのはリスト。1つだけ取り出すときと違って、[ ] が付いた形で返ってくることに注意しよう。
kudamonos = ["りんご", "みかん", "ぶどう", "もも"]print(kudamonos[1:3])実行結果
['みかん', 'ぶどう']
03 / 07
スライスの終わりの番号は「ここまで」ではなく「この手前まで」。[1:3] に入るのは 1 と 2 で、3 は入らない。
意地悪に見えるけれど、いいことがある。終わりから始まりを引くと、取れる個数になるんだ。3 - 1 で2個。数えなおさずに済むよ。
range(3) が 0 1 2 で止まったのと同じきまりだね。Pythonは終わりを含まないと覚えてしまおう。
kazus = [10, 20, 30, 40, 50]print(kazus[0:2])print(kazus[2:5])実行結果
[10, 20] [30, 40, 50]
04 / 07
始まり を書かずに [:2] とすると、先頭からという意味になる。
[0:2] と同じだけれど、0 を書かないぶん「最初から」という気持ちがはっきり出るよ。
kudamonos = ["りんご", "みかん", "ぶどう", "もも"]print(kudamonos[:2])実行結果
['りんご', 'みかん']
05 / 07
逆に 終わり を書かずに [2:] とすると、そこから最後までになる。
個数を知らなくても最後まで取れるので、len を呼ぶ必要がない。ここでもPythonは親切だね。
kudamonos = ["りんご", "みかん", "ぶどう", "もも"]print(kudamonos[2:])print(kudamonos[-2:])実行結果
['ぶどう', 'もも'] ['ぶどう', 'もも']
06 / 07
両方省いた [:] はまるごと全部。同じ中身がそのまま返ってくる。
意味が無さそうに見えるけれど、これはコピーを作る書きかたなんだ。返ってくるのは別のリストなので、片方に append しても、もう片方は変わらないよ。
kudamonos = ["りんご", "みかん"]kopii = kudamonos[:]kopii.append("ぶどう")print(kudamonos)print(kopii)実行結果
['りんご', 'みかん'] ['りんご', 'みかん', 'ぶどう']
07 / 07
xs[1:3] … 1番めから3番めの手前までxs[:2] … 先頭からxs[2:] … そこから最後までxs[:] … まるごと(コピー)このグループはここまで。次のグループでは、まったく同じ番号とスライスが文字にも効くことを見ていくよ。namae[0] で1文字目、namae[0:3] で先頭3文字。覚えることが一気に減るのを楽しみにしていて。