くり返しとデータの持ち方

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文字。覚えることが一気に減るのを楽しみにしていて。