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

INPUT · スライド

まとめて切り出す

01 / 07

範囲を指定して切り出す

1文字ではなく、まとめて何文字か取り出したいときはスライスを使う。

namae[0:3] と書くと、番号 0 から 3 の手前まで、つまり先頭3文字が取り出せる。リストでやったのとまったく同じ形だね。

namae = "やまだはなこ"print(namae[0:3])

実行結果

やまだ

02 / 07

終わりの番号は含まない

ここが引っかかりやすいところ。[0:3] に番号3の文字は入らない。

文字やまだはなこ
番号012345

入るのは 0 1 2 の3文字。「うしろの番号は入らない」と覚えてしまおう。おかげで [0:3] は「3文字ぶん」と読めるようになっているんだ。

namae = "やまだはなこ"print(namae[3:6])

実行結果

はなこ

03 / 07

番号は省略できる

前を省くと「最初から」、うしろを省くと「最後まで」になる。

  • namae[:3] … 最初から3文字
  • namae[3:] … 4文字目から最後まで
  • namae[:] … まるごと全部

省略した形のほうがよく使われるよ。数えなくていいところは数えないのがコツだ。

namae = "やまだはなこ"print(namae[:3])print(namae[3:])print(namae[:])

実行結果

やまだ
はなこ
やまだはなこ

04 / 07

マイナスもスライスに使える

マイナスの番号はスライスの中でも使える。[-2:] なら「後ろから2文字」、[:-1] なら「最後の1文字を除いた残り」だよ。

長さを調べなくても端っこを切り出せるので、覚えておくと出番が多い。

namae = "やまだはなこ"print(namae[-2:])print(namae[:-1])

実行結果

なこ
やまだはな

05 / 07

リストのスライスとそっくり

並べて見てみよう。書き方はまったく同じで、返ってくるものだけが違う。

  • リストをスライスするとリストが返る
  • 文字列をスライスすると文字列が返る

Python は「並んでいるもの」を同じ記号で扱えるように作られている。1つ覚えれば両方に効くんだ。

kudamonos = ["りんご", "みかん", "ぶどう"]namae = "やまだはなこ"print(kudamonos[0:2])print(namae[0:2])

実行結果

['りんご', 'みかん']
やま

06 / 07

文字列は書きかえられない

ここで大きな違いがひとつ。リストは kudamonos[0] = "もも" で中身を入れかえられた。

でも文字列は同じことができない。1文字だけ差しかえようとすると、エラーで止められる。

namae = "やまだ"namae[0] = "あ"

実行結果

TypeError: 'str' object does not support item assignment

07 / 07

変えたいときは作り直す

では1文字だけ変えたいときはどうするか。元をいじるのではなく、新しい文字列を作る。

切り出してつなげばいい。元の namae はそのまま残っていて、別の文字列ができあがるよ。

この「元は変わらない」という性質は、次のレッスンでもう一度出てくる。文字列の道具はどれも新しい文字列を返すんだ。

namae = "やまだ"atarasii = "あ" + namae[1:]print(atarasii)print(namae)

実行結果

あまだ
やまだ