Pyhtonの基礎復習はこれだけ　~2~

#4.リスト [ ]

###リストの使い方

- リストの値の出力方法。

インデックスは0から数える

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam = [0]
cat
spam = [1]
bat
spam = [2]
rat
spam = [3]
elephant
```

- 負のインデックス

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam = [-1]
elephant
```

- リストの中のリストの値の出力方法。

初めの[ ]でリストを指定し、次の[ ]で値を指定する。

```Python
spam = [['cat', 'bat', 'rat', 'elephant'], ['1', '2', '3']]
spam = [0][1]
bat
```

- 部分リストの出力方法

スライスを用いることで部分リストを取得できる。
__第1引数は開始インデックスを表し、第2引数は終了値の1小さい値を表す。__
__値を省略すると0になる。__

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam = [0:3]
['cat', 'bat', 'rat']
spam = [:2]
 ['cat', 'bat']
```

- インデックスを用いてリストの値を変更する

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam[4] = 12345
spam
['cat', 'bat', 'rat', 12345]
```

- del文を用いてリストから値を削除する。

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
del spam[2]
spam
['cat', 'bat', 'elephant']
```

- 複数代入法

変数にリストの値を代入する時、以下のプログラムより短く書ける。

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
size = spam[0]
color = spam[1]
cat = spam[2]

print(size)
cat
print(color)
bat
print(cat)
rat
# 以下は複数代入法
spam = ['cat', 'bat', 'rat', 'elephant']
size, color, cat = spam
```

- forループとリスト

以下のプログラムはcats_nameのリストを順番にnameに代入していく。

```Python
for name in cats_name:
    print(name)
# これは以下のプログラムと同じ動き
for i in range(1, 6)
    print(i)
```

- リストの例外

リストは字下げルールの例外になり
連結文字の\（バックスラッシュ）を使えば改行、字下げができる。

###メソッド

- index()メソッド

リストの値からインデックスを出力する。

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam.index('bat')
1
```

- append()メソッド　__（リストのメソッド）__

リストに新しい値を追加する。

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam.append('moose')
spam
['cat', 'bat', 'rat', 'elephant', 'moose']
```

- insert()メソッド　__（リストのメソッド）__

append()メソッドと異なり、任意の場所に値を追加する。
第1引数にインデックス、第2引数に値を入力する。

```Python
spam = ['cat', 'bat', 'rat', 'elephant']
spam.insert(1, 'chicken')
spam
['cat', 'chicken', 'bat', 'rat', 'elephant']
```

- remove()メソッド

リストから値を削除する。
__remove()メソッドは削除したい値が分かっているとき。__
__del文は削除したい値のインデックスが分かっているとき。__
__複数値があるときは最初の値だけ削除される。__

```Python
spam = ['cat', 'bat', 'cat', 'rat', 'elephant']
spam.remove('cat')
spam
['bat', 'cat', 'rat', 'elephant']
```

- sort()メソッド

リストの値を並び替える。

```Python
spam = [2, 5, 3.14, 1, -7]
spam.sort()
spam
[-7, 1, 2, 3.14, 5]
```

逆順ソートしたい場合はキーワード引数のreverseにTrueを指定する。

```Python
spam = [2, 5, 3.14, 1, -7]
spam.sort(reverse=True)
spam
[5, 3.14, 2, 1, -7]
```

sort()メソッドはアルファベットの大文字、小文字の順にソートするので
アルファベット順にソートしたい場合はキーワード引数keyにstr.lowerを渡す。

```Python
spam = ['a', 'z', 'A', 'Z']
spam.sort(key=str.lower)
spam
['a', 'A', 'z', 'Z']
```

###文字列とリスト

文字列をリストとして扱うことができる。

```Python
name = 'Zophie'
name[0]
'Z'
name[-2]
'i'
name[:4]
'Zoph'

for i in name:
    print(i)
'Z'
'o'
'p'
'h'
'i'
'e'
```

###ミュータブル、イミュータブル

リストはミュータブル（変更可能）
文字列はイミュータブル（変更不可）

###タプル型

リスト[ ]と異なる点が2つある。

- [ ]ではなく( )を用いる。
- イミュータブルである。

__タプルの要素が1つのときは('Hello',)のようにカンマを付ける。__

###list()関数、tuple()関数

- リストをタプルにする。

```Python
tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
```
- タプルをリストにする。

```Python
list('Hello')
['H', 'e', 'l', 'l', 'o']
```

###copyモジュールとcopy(),deepcopy()
リストや辞書を複製する時につかう。

- copu.copy()　リストや辞書の複製
- copy.deepcopy　リストや辞書の中のリストや辞書を複製

```Python
import copy
spam = ['A', 'B', 'C', 'D']
cheese = copy.copy(spam)
cheese[1] = 42
spam
['A', 'B', 'C', 'D']
cheese
['A', 42, 'C', 'D']
```

#5.辞書とデータ構造
###辞書型
リストのインデックスは整数型であったのに対して
辞書はさまざまなデータ型を用いることができる。
リスト　[ ]
タプル　( )
__辞書　　{ }__
辞書のインデックスを__キー__といい、キーと値を合わせて__キー・バリュー・ペア__という。

- 値にアクセスする方法

```Python
my_cat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
my_cat['size']
'fat'
```

###辞書とリストの比較
辞書はリストと異なり要素の順序がない。
つまりインデックスを任意の値から始めることができる。
順序がないのでスライスを使うことができない。

###リスト風の値を返すメソッド
以下の3つのメソッドは辞書で用いるとリスト風の値を返す。

- keys()メソッド

辞書の__キー__を返す。

```Python
spam = {'color': 'red', 'age': 42}
for k in spam.keys():
    print(k)
color
age
```

- values()メソッド

辞書の__値__を返す。

```Python
spam = {'color': 'red', 'age': 42}
for v in spam.values():
    print(v)
red
42
```

- items()メソッド

辞書の__キー・バリュー・ペア__を返す。

```Python
spam = {'color': 'red', 'age': 42}
for i in spam.items():
    print(i)
('color', 'red')
('age', 42)
```

- items()メソッドの応用

キーと値を別々の変数に代入させることができる

```Python
spam = {'color': 'red', 'age': 42}
for k, v in spam.items():
    print('Key: ' + k +'Value: ' + str(v))
Key: color Value: red
Key: age Value: 42
```

###get()メソッド

get()メソッドはアクセスしたいキーが存在しないとき任意の値を返す設定ができる。
つまり辞書にキーが存在しないとき発生するエラーを避けることができる。
__アクセスしたいキーと、存在しなかった場合返す値を入力する。__

```Python
picnic_items = {'apples': 5, 'cups': 2}
print('I am bringing' + str(picnic_items.get('cups', 0)) + ' cups.'
I am bringing 2 cups.
# キーが存在しないとき以下のようになる。
picnic_items = {'apples': 5, 'cups': 2}
print('I am bringing' + str(picnic_items.get('eggs', 0)) + ' cups.'
I am bringing 0 cups.
```

###setdefault()メソッド

辞書にキーが未登録の場合、キー・バリュー・ペアを登録することができる。
第1引数に調べたいキーを、第2引数にそのキーが存在しないとき登録する値を入力する。

```Python
spam = {'name': 'Pooka', 'age': 5}
spam.setdefault('color', 'black')
spam
{'name': 'Pooka', 'age': 5, 'color': 'black'}
# 存在するときは以下のようになる。
spam = {'name': 'Pooka', 'age': 5}
spam.setdefault('color', 'white')
spam
{'name': 'Pooka', 'age': 5, 'color': 'black'}
```

###整形表示
pprintモジュールをインポートすると、pprint()関数やpformat()関数が使用できる。
これらは辞書の内容をきれいに表示することができる。

- pprint.pprint()

整形した辞書を表示する。
文字数をカウントするプログラムに使用すると以下のようになる。

```Python
import pprint
message='It was a bright cold day in April, and the clocks were striking thirteen.'
count={}
for character in message:
    count.setdefault(character,0)
    count[character]=count[character]+1
pprint.pprint(count)
{' ': 13,
 ',': 1,
 '.': 1,
 'A': 1,
 'I': 1,
 'a': 4,
 'b': 1,
 'c': 3,
 'd': 3,
 'e': 5,
 'g': 2,
 'h': 3,
 'i': 6,
 'k': 2,
 'l': 3,
 'n': 4,
 'o': 2,
 'p': 1,
 'r': 5,
 's': 3,
 't': 6,
 'w': 2,
 'y': 1}
```

- pprint.pformat()

pprint.pprint()は画面に表示するのに対して、pprint.pformat()は画面に表示しない。
つまり以下の2つの文は同等になる。
pprint.pprint(spam)
print(pprint.pformat(spam))


#続き
[Pythonの基礎復習はこれだけ~3~]
(https://qiita.com/skyapl/items/c364e8bca18e6c43c664)

__最初から__
[Pythonの基礎復習はこれだけ~1~](https://qiita.com/skyapl/items/866f3b0d81fd6410123d)