Pythonコレション

リスト

複数の変数をまとめて管理。番号(添え字)で区別する。添え字は0~要素数-1まで。

# リストを作る
lst = [5,9,8,7,3]

#リストの値を表示
print(lst[2]) # 2番目を表示

#リストに値を入れる
#リスト名[添え字] = 値
lst[0]=10

#リストにデータ追加
lst.append(20)

#リストからn番目を削除
lst.pop(n)

# リストからデータ9を削除
lst.remove(9)

#リストの要素数
# len(リスト)
len(lst)

全要素表示

lst = [5,9,8,7,3]

for num in lst:
    print(num)

何番目かも表示したいときにはenumerate関数を使う

lst = [5,8,9,7,4]

for index,val in enumerate(lst): # 0から開始
    print(index,"番目:",val)

for index,val in enumerate(lst,1): # 1から開始
    print(index,"番目:",val)

2つのリストを同時に全要素アクセスしたいときにはzip関数を使う

names = ['りんご','みかん','いちご']
prices = [100,200,150]

for name,price in zip(names,prices):
    print(name,price)

リストについての判定

if lst:
	print("1つ以上の要素有り")

if not lst:
	print("要素無し")

if 10 in lst:
	print("10がある")

整列

lst = [5,9,8,7,3]

lst.sort() # 昇順
print(lst)

lst.sort(reverse=True) # 降順
print(lst)

lst2 = sorted(lst) # 元を変更せずに整列
print(lst2)

lst.reverse() # 逆順
print(lst)

アンパック

リストから普通の変数に代入する。
lst = [5,9,8]

num1, num2, num3 = lst
*を付けた変数には残りリストを代入可能
lst = [5,9,8,7,4]

num1, num2, *other = lst

# num1=5,num2=9,other=[8,7,4]

これは最後だけでは無く、最初や中間にも書ける。

内包表記

リストから別のリストを生み出す。

基本文法

# 条件なし
lst = [変数への処理 for 変数 in リスト]

# 条件があるとき
lst = [変数への処理 for 変数 in リスト if 条件]

lst = [1,3,4]

# リストの要素を全て二倍
lst2 = [num*2 for num in lst]
print(lst2) # 2,6,8

# リストから1より大きい要素を抜き出す
lst3 = [num for num in lst if num > 1]
print(lst3) # 3,4

タプル

複数の値をまとめて管理。番号(添え字)で区別する。添え字は0~要素数-1まで。
リストとの違いは変更できないこと

# タプルを作る 
tpl = (5,9,8,7,3)

# タプルは()は必須ではなく、カンマが必須
tpl = 5,9,8,7,3

# 一個の要素でもタプルにしたいならカンマが必要
tpl = (5,)

# タプル関数(リストからの変換)
tpl = tuple([5,9,8,7,3])

# list関数(リストへの変換)
lst = list(tpl)

#要素表示
print(tpl[0])

#要素数
print(len(tpl))

全要素表示

tpl = (5,9,8,7,3)

for num in tpl:
    print(num)

辞書(ディクショナリ)

キーと値のペアをまとめて管理。添え字の代わりにキーを指定する。

# 辞書を作る
dic = {"ringo":100,"mikan":120,"ichigo":200}

# dict関数の場合
dic = dict(ringo=100,mikan=120,ichigo=200)

# 値の表示
print( dic["ringo"] )

# 値の変更
dic["ringo"] = 110

# 値の追加
dic["momo"] = 300

# 値の削除
dic.pop("mikan")
# もしくは
del dic["mikan"]

# キーの有無判定
if 'ringo' in dic:
    print("ある")

2つの辞書の合体。

dic1 = dict(ringo=100,mikan=120)
dic2 = dict(ringo=200,ichigo=200)

# 合体
dic1.update(dic2)

# 表示
print( dic1 ) # {'ringo': 200, 'mikan': 120, 'ichigo': 200}

全要素表示

keys()で全てのキー、values()で全ての値、items()で全てのペア(タプル)がとれる

# 全てのキー(dic.keys()でも同じ)
for key in dic:
    print(key)
    print(dic[key])

# 全ての値
for value in dic.values():
    print(value)

# 全てのペア
for key,value in dic.items():
    print(key)
    print(value)

内包表記

辞書・リストから別の辞書を生み出す。

基本文法

lst = {キー:値 for 変数 in リスト}

# 文字列とその長さ
lst = ['apple','book','pen']

dic = {item:len(item) for item in lst}

print(dic) # {'apple': 5, 'book': 4, 'pen': 3}

セット

重複と順番が無いリスト

# セットを作る
ken = {"熊本","福岡","長崎"}

# 追加
ken.add("宮崎")
ken.add("熊本") # 追加されない

#削除
ken.remove("長崎")

# 全て表示
{'熊本', '福岡', '宮崎'}
print( ken )

要素の有無判定

in演算子で要素がセット無いにあるかどうかがわかる。

if "熊本" in ken:
    print("熊本があります")

全要素表示

for k in ken:
    print(k)

集合演算

差分を取ったり、AND,OR,XOR演算が出来る
ken = {"熊本","福岡","長崎"}
shin = {"熊本","福岡","佐賀"}

print( ken - shin ) # 差分 長崎
print( ken | shin ) # OR 熊本、福岡、長崎、佐賀
print( ken & shin ) # AND 熊本 福岡
print( ken ^ shin ) # XOR 長崎 佐賀

シーケンス

リスト、タプル、文字列など

シーケンスの連結

+演算子で連結

lst = [1,2,3]
lst2 = [4,5,6]
lst3 = lst+lst2

print(lst3)# 1,2,3,4,5,6

*演算子で複製して連結

lst = [1,2,3]*2
print(lst) # 1,2,3,1,2,3

シーケンスの検索

lst = [5,8,9]
print(8 in lst) # True
lst = [5,8,9]
print(8 not in lst) # False

スライス

[開始:終了]で部分取得できる。開始~終了-1まで。指定しない場合には最初または最後まで。マイナスは後ろから数える。

lst = [5,8,9,1,3]

print( lst[1:3]) # 8,9
print( lst[:3]) # 5,8,9
print( lst[3:]) # 1,3
print( lst[:-1]) # 5,8,9,1
print( lst[-2:]) # 1,3

[開始:終了:増分]も可能。マイナスは後ろから数える。

lst = [5,8,9,1,3,4]

print( lst[0:6:2]) # 8,9
print( lst[:3]) # 5,8,9
print( lst[3:]) # 1,3
print( lst[:-1]) # 5,8,9,1
print( lst[-2:]) # 1,3