# 変数

変数は、基本的に「値を入れる箱」です。Python では、変数の型を指定する必要はなく、整数、浮動小数点数、文字列、リスト、辞書など、好きな型の値を代入できます。値の代入もシンプルで、`=` を使うだけです。[Perl](perl) のように `$`、`@`、`%` といった呪文を唱える必要はありません。記号を覚えるより、研究を進めましょう。


```python
a = 1
p = 3.14
dna = "ACGAGCTTATATAGTCTAC"
rna = ""

l1 = ["A", "B", "C", "D", "E"]
l2 = [1, 2, 3, 4, 5]

dna2aa = {"ATC": "I", "CCA": "P", "GTA": "V"}
```


## リスト

### リストの基本操作

複数の値をまとめて扱うには、Python ではリストと呼ばれる変数型を利用します。リストの宣言は通常の変数と同じように行いますが、値を `[]` で囲み、カンマで区切って並べてから代入します。


```python
a = ["A", "B", "C", "D", "E"]
b = [1, 2, 3, 4, 5]
```

リストから値を取り出すには、インデックスを使います。Python のインデックスは 0 から始まることに注意してください。例えば、リスト `a` から 3 番目の要素を取り出すには `a[2]` と書きます。

```python
print(a[2])
## C
```

リストの要素を順に取り出して処理を行うには、`for` 文を使います。

```python
arr = ["A", "C", "D", "B"]

for i in range(len(arr)):
    print(arr[i])
## A
## C
## D
## B
```

または、次のように直接要素を取り出すこともできます。これは他のプログラミング言語の `foreach` などに相当します。

```python
for ele in arr:
    print(ele)
## A
## C
## D
## B
```


### リスト要素の並べ替え

リストの値を並べ替えるには、`sorted()` 関数を使用します。デフォルトでは昇順に並べ替えられますが、`reverse=True` を指定すると降順に並べ替えることもできます。

```python
arr = ["A", "C", "D", "B"]

for ele in sorted(arr):
    print(ele)
## A
## B
## C
## D

for ele in sorted(arr, reverse=True):
    print(ele)
## D
## C
## B
## A
```

### 要素の追加・削除

要素の追加は、`append()`、`insert()`、`pop()` メソッドを使用します。`append()` はリストの末尾に要素を追加し、`insert()` は指定したインデックスに要素を挿入します。

```python
arr = ["A", "B", "C", "D", "E"]

arr.insert(0, "0")
arr
## ["0", "A", "B", "C", "D", "E"]


arr.append("Z")
arr
## ["0", "A", "B", "C", "D", "E", "Z"]
```

要素の削除は、`pop()` メソッドを使用します。`pop()` はリストの末尾の要素を削除して返しますが、引数にインデックスを指定すると、その位置の要素を削除して返します。


```python
arr = ["A", "B", "C", "D", "E"]

a = arr.pop(1)
b = arr.pop()
arr
## ["A", "C", "D"]
```


## 辞書（ディクショナリ）

辞書（ディクショナリ）は、キーと値のペアでデータを管理するデータ構造です。例えば、広辞苑のようにキーを単語、値を解説文としてデータを管理したり、[コドン](codon)をキー、対応する[アミノ酸](amino_acid)を値とした対応表を作成したりすることができます。このように、キーを用いて値を直接参照できる点が辞書の大きな特徴です。


```python
dna2aa = {"ATC": "I", "CCA": "P", "GTA": "V"}
print(dna2aa["CCA"])
## P
```

辞書はキーを使ってデータを管理するため、要素には決まった順序がありません。そのため、要素を常に同じ順序で取り出したい場合は、キーを並べ替えるなどの工夫が必要になります。次の例では、キーを `sorted` 関数で並べ替えてから辞書の要素を順に取り出す方法を示します。

```python
for k in sorted(dna2aa.keys()):
    print(f"key: {k}, value: {dna2aa[k]}")
```

`keys()` メソッドの代わりに `items()` メソッドを使うと、キーと値のペアを同時に取得できます。このとき、その値を利用して並べ替えることも可能です。

```python
for k, v in sorted(dna2aa.items(), key=lambda item: item[1]):
    print(f"key: {k}, value: {v}")
```

既存の辞書に要素を追加したり、更新しありする場合は、次のようにします。


```python
dna2aa["AUG"] = "M"
dna2aa["CCA"] = "Q"
```

辞書の要素を削除するには、`del` 文を使用します。

```python
del dna2aa["ATC"]
```


