#4.リスト [ ]
###リストの使い方
- リストの値の出力方法。
インデックスは0から数える
spam = ['cat', 'bat', 'rat', 'elephant']
spam = [0]
cat
spam = [1]
bat
spam = [2]
rat
spam = [3]
elephant
- 負のインデックス
spam = ['cat', 'bat', 'rat', 'elephant']
spam = [-1]
elephant
- リストの中のリストの値の出力方法。
初めの[ ]でリストを指定し、次の[ ]で値を指定する。
spam = [['cat', 'bat', 'rat', 'elephant'], ['1', '2', '3']]
spam = [0][1]
bat
- 部分リストの出力方法
スライスを用いることで部分リストを取得できる。
第1引数は開始インデックスを表し、第2引数は終了値の1小さい値を表す。
値を省略すると0になる。
spam = ['cat', 'bat', 'rat', 'elephant']
spam = [0:3]
['cat', 'bat', 'rat']
spam = [:2]
['cat', 'bat']
- インデックスを用いてリストの値を変更する
spam = ['cat', 'bat', 'rat', 'elephant']
spam[4] = 12345
spam
['cat', 'bat', 'rat', 12345]
- del文を用いてリストから値を削除する。
spam = ['cat', 'bat', 'rat', 'elephant']
del spam[2]
spam
['cat', 'bat', 'elephant']
- 複数代入法
変数にリストの値を代入する時、以下のプログラムより短く書ける。
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に代入していく。
for name in cats_name:
print(name)
# これは以下のプログラムと同じ動き
for i in range(1, 6)
print(i)
- リストの例外
リストは字下げルールの例外になり
連結文字の\(バックスラッシュ)を使えば改行、字下げができる。
###メソッド
- index()メソッド
リストの値からインデックスを出力する。
spam = ['cat', 'bat', 'rat', 'elephant']
spam.index('bat')
1
- append()メソッド (リストのメソッド)
リストに新しい値を追加する。
spam = ['cat', 'bat', 'rat', 'elephant']
spam.append('moose')
spam
['cat', 'bat', 'rat', 'elephant', 'moose']
- insert()メソッド (リストのメソッド)
append()メソッドと異なり、任意の場所に値を追加する。
第1引数にインデックス、第2引数に値を入力する。
spam = ['cat', 'bat', 'rat', 'elephant']
spam.insert(1, 'chicken')
spam
['cat', 'chicken', 'bat', 'rat', 'elephant']
- remove()メソッド
リストから値を削除する。
remove()メソッドは削除したい値が分かっているとき。
del文は削除したい値のインデックスが分かっているとき。
複数値があるときは最初の値だけ削除される。
spam = ['cat', 'bat', 'cat', 'rat', 'elephant']
spam.remove('cat')
spam
['bat', 'cat', 'rat', 'elephant']
- sort()メソッド
リストの値を並び替える。
spam = [2, 5, 3.14, 1, -7]
spam.sort()
spam
[-7, 1, 2, 3.14, 5]
逆順ソートしたい場合はキーワード引数のreverseにTrueを指定する。
spam = [2, 5, 3.14, 1, -7]
spam.sort(reverse=True)
spam
[5, 3.14, 2, 1, -7]
sort()メソッドはアルファベットの大文字、小文字の順にソートするので
アルファベット順にソートしたい場合はキーワード引数keyにstr.lowerを渡す。
spam = ['a', 'z', 'A', 'Z']
spam.sort(key=str.lower)
spam
['a', 'A', 'z', 'Z']
###文字列とリスト
文字列をリストとして扱うことができる。
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()関数
- リストをタプルにする。
tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
- タプルをリストにする。
list('Hello')
['H', 'e', 'l', 'l', 'o']
###copyモジュールとcopy(),deepcopy()
リストや辞書を複製する時につかう。
- copu.copy() リストや辞書の複製
- copy.deepcopy リストや辞書の中のリストや辞書を複製
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.辞書とデータ構造
###辞書型
リストのインデックスは整数型であったのに対して
辞書はさまざまなデータ型を用いることができる。
リスト [ ]
タプル ( )
辞書 { }
辞書のインデックスを__キー__といい、キーと値を合わせて__キー・バリュー・ペア__という。
- 値にアクセスする方法
my_cat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
my_cat['size']
'fat'
###辞書とリストの比較
辞書はリストと異なり要素の順序がない。
つまりインデックスを任意の値から始めることができる。
順序がないのでスライスを使うことができない。
###リスト風の値を返すメソッド
以下の3つのメソッドは辞書で用いるとリスト風の値を返す。
- keys()メソッド
辞書の__キー__を返す。
spam = {'color': 'red', 'age': 42}
for k in spam.keys():
print(k)
color
age
- values()メソッド
辞書の__値__を返す。
spam = {'color': 'red', 'age': 42}
for v in spam.values():
print(v)
red
42
- items()メソッド
辞書の__キー・バリュー・ペア__を返す。
spam = {'color': 'red', 'age': 42}
for i in spam.items():
print(i)
('color', 'red')
('age', 42)
- items()メソッドの応用
キーと値を別々の変数に代入させることができる
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()メソッドはアクセスしたいキーが存在しないとき任意の値を返す設定ができる。
つまり辞書にキーが存在しないとき発生するエラーを避けることができる。
アクセスしたいキーと、存在しなかった場合返す値を入力する。
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引数にそのキーが存在しないとき登録する値を入力する。
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()
整形した辞書を表示する。
文字数をカウントするプログラムに使用すると以下のようになる。
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~