お帰りなさい｡
続けて､ リストについて説明します｡
さて､ ここまでの角括弧は､ 以前にも見たことがありますよね？
弦楽器で作業している時に見かけました｡
また､ 文字列と同じように､ リストもリストスライスが使えるという点ではよく似ています｡
文字列のスライスを思い出すと､ helloのようなものがあり､ それを文字列､ たとえば変数stringに代入して､
stringとスライスを行うことができました｡
だから､ こんな感じでやってください｡
スタート､ ストップ､ そしてステップスルーがあったところ｡
つまり､ 0番のインデックスから始まり､ 2番のインデックスで終わるようにします｡
そして､ ひとつひとつ丁寧に｡
だから､ リストスライスも可能なのです｡
そこで､ このカードを少し大きくしてみましょう｡
そして､ 実はこのようにフォーマットすることで､ よりすっきりさせることができるんです｡
さて､ では何をカートに入れましょうか？
おもちゃも追加します｡
そしたらね｡
アマゾンは今､ 食料品もやっている｡
そこで､ おいしいブドウを加えてみよう｡
すごい｡
さて､ カートの中の商品をひとつひとつ取得したいとします｡
まあ､ 単純にこうすればいいだけなんですけどね｡
そして､ 私たちの全リストが揃いました｡
しかし､ リストのスライシングを使ってみよう｡
例えば､ 1つ目の項目から2つ目の項目までつかみたいとします｡
実行」をクリックすると
ノートやサングラスをもらう｡
最後まで行きたいけど､ 2作目以降は飛ばしたいのかもしれません｡
ノートやおもちゃをもらう｡
ゼロからのスタートでした｡
おもちゃに跨って､ 跨いで､ 跨いで､ ......終わり｡
すごい｡
そしてこれは､ 文字列との対話ですでに見えていることでもあります｡
でも､ ここからが面白いんです｡
文字列は不変であると言ったのを覚えていますか？
つまり､ 変えられないということです｡
そうですね｡
そして､ Helloのような文字列があったときに､ この話をしました｡
ゼロイコールZと言う挨拶が出来ませんでした｡
ここでエラーが出るんです｡
strオブジェクトはアイテムの割り当てをサポートしていませんと表示されます｡
それは不変のものです｡
しかし､ リストの面白いところは､ リストがミュータブルであることです｡
アマゾンのカートを変更してもいいように｡
そして､ あのね､ ノートブックなんて本当はいらないんだよ､ と言ってください｡
そこで､ 最初のアイテムであるノートを手に取ることにします｡
そして､ ノートの代わりに､ 私たちは何を求めているのでしょうか｡
新しいノートパソコンが欲しいと言うことにします｡
大きくグレードアップしています｡
このアマゾンのカートを印刷すると
あれを見てください｡
このリストを変更することができるんです｡
そういう意味ではエラーは出なかったし｡
リストは変更可能です｡
私たちは単にコンピュータノートのメモリ本棚に置き換えるだけで､ 私が「おい､ ノートパソコンに変えろ」と言えば､
そうさせてくれるのです｡
だからすごいんです｡
でも､ ここでちょっと試してみましょう｡
ここで別のプリントを作成し､ Amazonカートの中で､ インデックス1からインデックス3までのアイテムが欲しいとするリストスライスを使用するとどうでしょう｡
これを実行し､ どうなるか見てみましょう｡
試しに当ててみてください｡
それは期待通りですか？
このコードを見てみましょう｡
10番線に着くと､ ノートパソコンで更新されたアマゾンのカートを手に取り､ 私はアイテム1を手に取る｡
2､ 3
それがサングラスなんですね｡
おもちゃが2つ｡
だから､ ゼロワン､ ツー｡
そして､ 3つでストップ｡
ただ､ これを理解しやすくするために
ここでは､ まずゼロから始めましょう｡
そのため､ ノートパソコンが変更されたことがわかります｡
そして､ 2つ目のここ､ 11行目で､ Amazonのカートをプリントしています｡
でも､ ちょっと待ってください｡
このリストは変わらなかった｡
そしてそれは､ リストスライスの場合､ 新しいリストを作成することになるからです｡
このリストの新しいコピーです｡
ここではまったく新しいリストを作成して､ 実際に変数に代入しています｡ 新しいカートはAmazon
cartになります｡
そして､ ここでも同じことをやってみましょう｡
そして新しいカードは､ それだけでまったく新しいリストとなります｡
新しいカートを変えることができた｡
ゼロからガムにしましょう｡
そして､ これを印刷すると
見たか？
2つの新しい別々のリストを持っていますが､ リストは､ インデックスにあるものをいつでも変更できるので､ ミュータブルです｡
そして､ リストのスライスを行うたびに､ そのリストの新しいコピーが作成されます｡
しかし､ ここで厄介な質問があります｡
このままだとどうなるんだろう？
これを実行すると
うーん｡
見たか？
リストを切り刻むのではなく､ 単純にその新しいカードがAmazonのカートに匹敵すると言ったのです｡
そして､ 新たにカートインデックスを0からガムと等しくなるように変更しました｡
しかし､ 今度はAmazonのカートも修正されてしまいました｡
それはなぜでしょうか？
そして､ これは面接で遭遇するような､ ちょっとやっかいな質問です｡
なぜかというと､ 今のイコールのやり方だと､ ちょっと､ 新しいカートとアマゾンのカートがイコールになってしまうからです｡
そして､ アマゾンカートは何に相当するのでしょうか？
Amazonカートは､ 私たちの機械の中にあるメモリのどこかを指して､ 「Amazonカートとはこういうものだ」と教えてくれるのです｡
つまり､ ここではリストをコピーしているわけではないからです｡
その代わり､ 新しいカードの価値は､ Amazonのカートのメモリにあるものなら何でもいい､ ということにしています｡
現在､ 新しいカートを変更するときは､ ここからずっとAmazonカートを変更するだけです｡
だから､ これは重要な概念なんです｡
例えば､ リストをコピーしたい場合は､ 次のようにします｡
リストを丸ごとコピーしたところ｡
そして､ これはコードベースでもよく見かけることです｡
でも､ このラインは､ ちょっと､ コピーを作りたいんだ､ と言っているんです｡
リストスライスでこのAmazonカートをコピーして､ 新しいカートと同じにします｡
元のAmazonのカートはそのままで､ 新しいカートが別のものになっているのがわかると思います｡
これはもう､ 慣れるしかないですね｡
しかし､ リストのコピーと修正という考え方は､ 重要な概念です｡
次のビデオで､ もう少し詳しくご紹介します｡
とりあえず一息ついて､ 次回作でお会いしましょう｡
バイバイ｡