Pythonでリストを使う

## 環境
Python 3.6.5 :: Anaconda, Inc.

```python
$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 26 2018, 08:42:37) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
```
このようにインタープリタを起動する。
注意！コードに含まれる「>>>」や「...」はインタープリタの表示を再現しているものなので、SublimeText、VSCode、Pycharmなどのテキストエディタでコードを書く場合は省略可能。

## リストの基礎

### リストを作る

```python
>>> l = [1, 20, 4, 50, 2, 1, 2]
>>> l
[1, 20, 4, 50, 2, 1, 2]
```

### インデックスを利用してリスト内の要素を取得する

```python
>>> l = [1, 20, 4, 50, 2, 1, 2]
>>> l[1]
20
>>> l[3]
50
>>> l[-1]
2
```

スライスを用いて複数の要素を取得することも出来る。

```python
>>> l = [1, 20, 4, 50, 2, 1, 2]
>>> l[0:2]
[1, 20]
>>> l[:4]
[1, 20, 4, 50]
>>> l[3:]
[50, 2, 1, 2]
```

### リスト内の要素の数を出力する

```python
>>> l = [1, 20, 4, 50, 2, 1, 2]
>>> len(l)
7
```

### 任意の変数がリストであるかどうかを確認する

```python
>>> l = [1, 20, 4, 50, 2, 1, 2]
>>> type(l)
<class 'list'>
```

### リテラルをリスト化する
あまり使う機会はないかもしれないが下記のように出来る。

```python
>>> list('abcdefg')
>>> ['a', 'b', 'c', 'd', 'e', 'f', 'g', ]
```

### リスト内の要素を1つ飛ばしで取得する

```python

>>> n = [1, 2, 3, 4, 5, 6, 7, 8]
>>> n[::2]
[1, 3, 5, 7]
```

### ネストする(リストの中にリストを入れる)

```python
>>> a = ['a', 'b', 'c', ]
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
```
このように、奇妙な形だが、リストの中にリストを作成することが出来る。
ではインデックス番号を指定した場合はどうなるのか。

```python
>>> x = [['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[1]
[1, 2, 3]
```

リスト自体にインデックス番号が対応していることがわかる。
では、bのみを出力したい場合はどうするのか。

```python
>>> x = [['a', 'b', 'c'], [1, 2, 3]]
>>> x[0][1]
'b'
```

## リストを操作する

### リストに要素を追加する

```python
>>> s = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> s
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> s[0]
'a'
>>> s[0] = 'X'
>>> s
['X', 'b', 'c', 'd', 'e', 'f', 'g']
```
この追加方法は文字列のときにはエラーになっていたが配列に対しては問題なく使用できる。

### リストの要素を書き換える

```python
>>> s = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> s[2:5]
['c', 'd', 'e']
>>> s[2:5] = ['C', 'D', 'E']
>>> s
['X', 'b', 'C', 'D', 'E', 'f', 'g']
```

### リストの要素を削除する

```python
>>> s = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> s[2:5] = []
>>> s
['X', 'b', 'f', 'g']
>>> s[:]
['X', 'b', 'f', 'g']
>>> s[:] = []
>>> s
[]
```

## リストのメソッドを使う

### appendでリストの最後へ要素を追加する

```python
>>> n = [1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
>>> n
[1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
>>> n.append(100)
>>> n
[1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 100]
```

### insertでリストの任意の場所へ要素を追加する

```python
>>> n = [1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 100]
>>> n.insert(0, 200)
>>> n
[200, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 100]
```

### popでリストの要素を「取り出す」

```python
>>> n = [200, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 100]
>>> n.pop()
100
>>> n
[200, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
```
popを使用すると、リスト最後尾の100が返ってきた上で、リストから100が取り除かれている。
任意の位置の要素を「取り出す」場合には下記のようにする。

```python
>>> n = [200, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
>>> n.pop(0)
200
>>> n
[1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
```

### delでリストの要素を削除する

```python
>>> n = [1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
>>> del n[0]
>>> n
[2, 3, 3, 4, 5, 6, 7, 8, 9, 10]
```
delを用いて指定したインデックス番号の要素をリストから削除することが出来る。
delは非常に強力で、下記のようにするとリストそのものを削除し、リストが定義されていない状態に戻る。

```python
>>> del n
>>> n
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
```

## リスト同士を操作

### +でリスト同士を結合させる
リスト同士の結合は、プラスを使って単純に下記のようにできる。

```python
>>> a = [1, 2, 3, 4, 5]
>>> b = [6, 7, 8, 9, 10]
>>> a
[1, 2, 3, 4, 5]
>>> b
[6, 7, 8, 9, 10]
>>> x = a + b
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```

### +=でリストに別のリストの要素を付け加える

```python
>>> a = [1, 2, 3, 4, 5]
>>> b = [6, 7, 8, 9, 10]
>>> a += B
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```

### extendでリストを拡張する

```python
>>> x = [1, 2, 3, 4, 5]
>>> y = [6, 7, 8, 9, 10]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
```