https://ameblo.jp/shwepper/entry-12613347080.html

 

これの続きです。

 

これまで、数値文字列を紹介しましたが、今回はリストについてです。

リスト(list)はPythonにいくつか用意されている複数の値をひとまとめにするためのデータ型です。こういう、複数の値をまとめておくデータ型は複合データ型(Composite data type)と呼ばれ、Pythonにはリストの他にも辞書(dict)やタプル(tuple)などがあります。リストはPythonにおける複合データ型の基本みたいなものです。

 

リストは下記のように記述できます。

[1, 4, 9, 16, 25]

"["と"]"の間にコンマ区切りで値を入れていきます。今回は数値を入れていますが、文字列など他のデータ型の値も同様にリストにすることが可能です。そして、このリスト全体を一つの変数に代入することができます。

squares = [1, 4, 9, 16, 25]

リストは中身の数値に左から順番に0から始まる番号が付けられています。これをインデックス(index)といいます。このインデックスを使うことで、リストから数値を取り出すことができます。リストの右側に[]で囲んだ番号でインデックスを指定します。

>>> squares[0]  # indexing returns the item
1

ここで、インデックスが0から始まっていることに注意してください。左から1番目の値のインデックスは0です。

インデックスには負の値(−1, -2,...)を指定することもできます。この場合は右から-1,-2,...と数えます。

>>> squares[-1]
25

この番号の付け方がわかったら、もう一つの操作ができるようになります。それはリストを部分的に抜き出して新しいリストを作るスライス(slice)です。

>>> squares[1:3]
[4, 9]

:(コロン)を挟んで開始インデックスと終了インデックスを指定します。ここで注意が必要なのは『終了インデックスに指定されている値を含まない』という点です。

スライスをするときに負のインデックスを使用することももちろん可能です。また、開始インデックス、終了インデックスを省略した場合はそれぞれ最初から、最後までという意味になります。

>>> squares[-3:] 
[9, 16, 25]

開始も終了も省略すれば元のリスト全体をコピーした新しいリストをスライスでつくることもできます。

>>> squares[:]
[1, 4, 9, 16, 25]

ここで公式チュートリアルでは『浅いリストのコピー』という言葉が出てきますが、知っている人以外はとりあえず無視しといてください。それよりも、まずは代入とコピーの違いを理解しておくほうが大切です。下記の例を考えてみましょう。

>>> squares_copy = squares
>>> squares_copy
[1, 4, 9, 16, 25]

上記の結果は、ぱっと見た感じだとスライスを使ってコピーしたときと同じに見えます。でもPythonがやっていることは全く違う処理です。何が違うかというと、上記のように代入した場合はsquares_copyはsquaresと”同じ”データを参照します。これを参照のコピーといいます。言葉だけではわかりにくいので、違いを実際に見てみましょう。

>>> squares_copy[0] = 999
>>> squares
[999, 4, 9, 16, 25]

squares_copy[0]を999に書き換えたはずなのに、元のリストであるsquaresも書き換わっています。これが"同じ"データであるという意味です。文字通りsquares_copy[0]はsquares[0]と同じものということです。

では、今度はスライスをつかってコピーしてみます。

>>> squares_copy= squares[:]
>>> squares_copy
[1, 4, 9, 16, 25]
>>> squares_copy[0] = 999
>>> squares
[1, 4, 9, 16, 25]

さっきの代入の場合と前半は同じ結果ですが、今度はsquares_copy[0]を999に書き換えても元のリストsquaresはそのままです。スライスを使った場合は元のリストの値と同じ値を持ったリストが新しく作られてsquares_copyに代入されています。つまり、同じ値を持ったリストですが、違うデータになるのです。このようなコピーは値のコピーと呼ばれます。

参照のコピーと値のコピーの違いをリストで理解しておくと、今後の応用に役立ちますので、要チェックポイントです。

最後に公式では文字列のパートで文字列に対するインデックスやスライスの操作も解説しています。実は、リストと同じような操作が可能なので、確認しておきましょう!

 
次回は、