Closed4

Python3_Counter, DefaultDict, OrderedDict, Enum

かじるかじる

Python実践レシピより

Python3エンジニア認定実践試験メモ

Counterオブジェクト

main.py
from collections import Counter
import random

#==========
# Counter
my_cnt1 = Counter("spamhamegg")
print(my_cnt1)
# Counter({'a': 2, 'm': 2, 'g': 2, 's': 1, 'p': 1, 'h': 1, 'e': 1})

# 合計300個の配列を作る
my_list = ["spam"]*110 + ["ham"]*100 + ["egg"]*90
print(len(my_list))# 合計数300
random.shuffle(my_list)# Shuffle
print(Counter(my_list))# 出現回数を確認
# Counter({'spam': 110, 'ham': 100, 'egg': 90})

# Counter(内容は空)
my_cnt2 = Counter()
for num in [1, 3, 2, 1, 1, 3, 2, 1]:
	my_cnt2[num] += 1# 初期化しなくても+1でカウント可能
print(my_cnt2)
# Counter({1: 4, 3: 2, 2: 2})

print(my_cnt2[4])# デフォルト値は0
print(1 in my_cnt2) # True
print(5 in my_cnt2) # False

# 要素のキーを値の数だけ繰り返す
my_cnt3 = Counter(a=1, b=2, c=3, d=4)
print(list(my_cnt3.elements()))
# ['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd']

# 値が大きい順に2件
print(my_cnt3.most_common(2))
# [('d', 4), ('c', 3)]

# 減算する
my_cnt4 = Counter(b=2, d=1)
my_cnt3.subtract(my_cnt4)
print(my_cnt3)
# Counter({'c': 3, 'd': 3, 'a': 1, 'b': 0})

# 加算する
my_cnt5 = Counter(a=3, e=5)
my_cnt3.update(my_cnt5)
print(my_cnt3)
# Counter({'e': 5, 'a': 4, 'c': 3, 'd': 3, 'b': 0})
かじるかじる

DefaultDict

main.py
from collections import defaultdict

#==========
# DefaultDict

def value():
	return "no_data"

# デフォルト値にvalue関数を指定
d_dic1 = defaultdict(value, spam=100, ham=200)
print(d_dic1["spam"])# 100
print(d_dic1["ham"])# 200
print(d_dic1["egg"])# no_data <- デフォルト値

# デフォルト値を0に
d_dic2 = defaultdict(int)
d_dic2["spam"] += 1
d_dic2["ham"] += 2
d_dic2["egg"] += 3
print(list(d_dic2))
# ['spam', 'ham', 'egg']

# デフォルト値を空のリストに
d_dic3 = defaultdict(list)
print(d_dic3["spam"])
# []
d_dic3["spam"].append("ham")
d_dic3["spam"].append("egg")
print(d_dic3["spam"])
# ['ham', 'egg']
かじるかじる

OrderedDict

main.py
from collections import OrderedDict

#==========
# OrderedDict

o_dict = OrderedDict(one=1, two=2, three=3)
print(list(o_dict))
# ['one', 'two', 'three']

o_dict.move_to_end("two")# twoを末尾に移動
print(list(o_dict))
# ['one', 'three', 'two']

o_dict.move_to_end("two", last=False)# twoを先頭に移動
print(list(o_dict))
# ['two', 'one', 'three']

print(o_dict.popitem())# 末尾の要素を取り出す
# ('three', 3)

print(o_dict.popitem(last=False))# 先頭の要素を取り出す
# ('two', 2)
かじるかじる

Enum

main.py
import enum

@enum.unique
class Eto(enum.Enum):
	NE = enum.auto() # 1
	USI = enum.auto() # 2
	TORA = enum.auto() # 3
	U = enum.auto() # 4
	TATU = enum.auto() # 5
	MI = enum.auto() # 6
	UMA = enum.auto() # 7
	HITUJI = enum.auto() # 8
	SARU = enum.auto() # 9
	TORI = enum.auto() # 10
	INU = enum.auto() # 11
	I = enum.auto() # 12

print(Eto.HITUJI) # Eto.HITUJI
print(Eto["HITUJI"]) # Eto.HITUJI
print(Eto(8)) # Eto.HITUJI

eto = Eto.HITUJI
print(eto.name) # HITSUJI
print(eto.value) # 8

# 列挙型の比較
print(Eto.SARU == Eto.SARU) # True
print(Eto.SARU == Eto.TORA) # False
このスクラップは2ヶ月前にクローズされました