[Python]04章-01 いろいろなデータ構造（リストの作成と要素の取り出し）

#[Python]04章-01 リストの作成と要素の取り出し
この章ではPythonプログラムで扱うデータ構造について述べていきます。
その中で今回はリストについて触れていきたいと思います。

##オブジェクトとは
Pythonはオブジェクト指向言語と言われています。実は2章で扱った、文字列もオブジェクトというのですが、文字列というモノ（オブジェクト）に対して、動作（メソッド）をしたと思います。

今回扱うリストもオブジェクトの1つです。そういったオブジェクトに対して、また動作もできるようになります。

ただし、オブジェクトは理論的取り扱いが難しいので、詳細はオブジェクト指向の話をした際に詳細を伝えます。

##リストの作成
####数値リストの作成
Pythonでは関連のあるデータを1つにまとめて表現することができます。これを**リスト***と言います。

**Python Console** より、以下のコードを入力してください。

```.py
>>>L = [10, 20, 30, 40, 50]
```
上記のように、**リストは[ ]で囲み、「,」で区切って表現**します。Lという変数にはリストが代入されています。
以下のようにprint関数で、リストの中身を見ることができます。

```.py
>>>print(L)
[10, 20, 30, 40, 50]
```
最初に「変数」のところでお話ししましたが、値には変数名のタグが付いているとお話ししました。
今回も、リストに対して、タグがつけられていることには変わりはありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602679/b4875910-16ea-5345-6f72-8f8d3eb9d03a.png)

##リストの要素の確認

それぞれの値を**リストの要素**と言います。例えば、1つの要素を取り出すには、以下のように記載します。今回も文字列の時と同じで、リストの**要素番号は0番目から始まります**。
また、要素番号には文字列の時と同じで、**マイナスの番号も当てることができます**。

|番号（その1）|0| 1 | 2 | 3 | 4 |
|:-:|:-:|:-:|:-:|:-:|:-:|
|**番号（その2）**| **-5**| **-4** | **-3** | **-2** | **-1** |
|リスト内の数値|10|20 |30  |40  |50 |

```.py
>>>L[2]
30
>>>L[-2]
40
```
イメージでは以下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602679/11980568-ce3a-9d78-1231-820e34a9d907.png)

なお、もちろん、要素に存在しない番号を指定すると、以下のようにエラーとなります。

```.py
>>>L[5]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list index out of range
```


####文字列のリスト
リストには数値だけでなく、文字列も代入が可能です。ただし、文字列の場合は「'」（シングルクオーテーション）または「"」（ダブルクオーテーション）で囲む必要があります。

**Python Console** より、以下のコードを入力してください。

```.py
>>>strL = ['Japan', 'China', 'Korea']
>>>print(strL)
['Japan', 'China', 'Korea']
>>>strL[1]
'China'
```

strLという変数に、文字列のリストを作成し、要素を指定して出力させています。これは先ほどの数値のリストと同じですね。

##リストの取り出し
[02章-05](https://qiita.com/ko0821/items/df9049a78e8bd3924f91)でスライスについて説明しました。
リストでもスライスを適用できます。

**Python Console** より、以下のコードを入力してください。lsという変数名にリストを代入して、変数の中身を出力させて確認します。

```.py
>>>ls = ['Japan', 'Canada', 'Australia', 'England', 'German', 'Italy', 'France']
>>>print(ls)
['Japan', 'Canada', 'Australia', 'England', 'German', 'Italy', 'France']
```

変数lsの内容を要素番号を付与してまとめると以下のようになります。

|番号（その1）|0| 1 | 2 | 3 | 4 |5|6|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|**番号（その2）**|**-7**|**-6**| **-5**| **-4** | **-3** | **-2** | **-1** |
|リスト内の文字列|'Japan'|'Canada' |'Australia' |'England'|'German' |'Italy'|'France'|

上記をもとにスライスを用いて説明していきます。

```.py
>>>ls[2:]
['Australia', 'England', 'German', 'Italy', 'France']
>>>ls[:5]
['Japan', 'Canada', 'Australia', 'England', 'German']
>>>ls[2:5]
['Australia', 'England', 'German']
>>>ls[:-3]
['Japan', 'Canada', 'Australia', 'England']
>>>ls[1:-3]
['Canada', 'Australia', 'England']
```

まず、以下の結果について考えていきたいと思います。

```.py
>>>ls[2:]
>>>ls[:5]
>>>ls[2:5]
```

[02章-05](https://qiita.com/ko0821/items/df9049a78e8bd3924f91)の文字列のスライスのところでも説明した通り、数学的に考えてみるとわかりやすいかもしれません。**ls[2:]**については、以下の通りになります。（xについては番号と考えてください）

```math
2≦x
```

つまり、リストの要素番号が2以上の値はすべて出力するということになります。
**ls[:3]**や**ls[2:5]**についても、それぞれ以下の通りになります。文字列の時と扱いはほぼ同じですね。

```math
x＜5\\
2≦x＜5
```


次に、以下のスライスを見ていきたいと思います。

```.py
>>>ls[:-3]
>>>ls[1:-3]
```

これは先ほどの表と組み合わせて考えるとわかりやすいと思います。
「-3」という要素は上の表では'German'ですが、今回は-3の要素番号は含まない、つまり

```math
x＜-3
```
となるので、上記の表でいうと「-7」「-6」「-5」「-4」（つまり**['Japan', 'Canada', 'Australia', 'England']**）が該当することになります。

**ls[1:-3]**についても、表と照らし合わせるとわかりやすいかもしれません。

##最後に
今回はデータ構造の中で、リストについて述べました。リストについては今後Pythonでデータ分析を行ったりする際に必ず必要になるので、ぜひ押さえておきましょう。
次回は、リストの操作について述べていきたいと思います。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)