1.両端キューの両端キュー
Python組み込みリストクラスのappend、extend、popメソッドは通常、リストの最後から実行されます(pop()はデフォルトで最後の要素をポップします)。使用中、リストはスタック構造(LIFO)のようなものです。違いは、リストがより柔軟であり、スタックに基づいた動的な挿入方法、つまり挿入(インデックス、obj)とインデックス、スライス、およびその他の操作があることです。強力なリストもキュー(FIFO)を実装できるようですが、非常に柔軟性があるため、リスト内の要素を変更するのは非常に簡単であり、使用しても常にそれほど信頼できるとは限りません。より良いキュー構造を実現するために、一般的なプログラマは自分でクラスを実装します。
コレクションモジュールで提供されている両端キューは、キューに基づいてヘッドとテールの両端で追加とポップを実行するためのものです。さらに、挿入や回転などのメソッドもあり、これらも非常に柔軟な
キーメソッドです。
append()
#右端から要素を追加(リストと同じ)appendleft()#左端から要素を追加(リストと同じ)
extend()#右端から1つずつ反復オブジェクトを
追加(リストと同じ)extendleft()#左端から1つずつ追加反復可能オブジェクト(リストと同じ)
pop()
#右端からの要素のポップ(リストと同じ)popleft
()#左端からのデータのポップcount()#キュー内の要素の数をカウント(リストと同じ)
insert(index、obj )
#指定された位置に要素を挿入(リストと同じ)回転()#キューを回転
基本的な使用例:
from collections import deque
d = deque()
#增加数据
d.append('1')
d.append('2')
d.appendleft('3')
l = ['4','5']
d.extend(l)
d.extendleft(l)
print(d)
#计算deque元素个数
print(d.count('5'))
#循环移动
d.rotate(1)
print(d)
d.rotate(-1)
print(d)
#一般的に使用される在庫および倉庫在庫の移動平均を計算します
from collections import deque
import itertools
def moving_average(iterable,n=3):
it = iter(iterable)
d = deque(itertools.islice(it,n-1)) #迭代出前2个数据
print(d)
d.appendleft(0) #防止第一次运行算法时候把第一个数据删除
s = sum(d)
print(d)
print(s)
for elem in it:
s += elem-d.popleft()
d.append(elem)
yield s/float(n)
l = [10,20,18,27,15]
for average in moving_average(l):
print(average)
2. defaultdict
通常、Pythonの組み込みdictを使用して、キーキーに従って対応する値をクエリします。対応するキーがない場合、エラー(KeyError)が報告されます。しかし、この問題はdefaultdictに現れます。
例:
dd = defaultdict(lambda:"none") #只需要在定义的时候为不存在的key定义指定的显示值
dd["a"] = "apple"
dd["b"] = "banana"
print(dd["c"])
print(dd)
结果:
>>>none
>>>defaultdict(<function <lambda> at 0x0000023B1C1919D8>, {'c': 'none', 'a': 'apple', 'b': 'banana'})
2番目の記事の結果から、defaultdictは存在しないキーを辞書に保存し、既存のキーは別の辞書に保存されていることがわかります。要素をクエリする必要があるときに、存在しないキーに遭遇した場合は、最初のディクショナリで事前設定された表示値を取得します。
3. OrderDict順序付き辞書
Pythonの組み込み辞書を使用する場合、print()を使用して辞書全体を印刷すると、前後の2つの辞書のキーと値のペアの順序が同じではないことがわかります(作成者は、前後の2つのハッシュ値が異なると推測しています)。順序付き辞書OderDictでは、この現象は発生しません。
例:
od = OrderedDict()
od["1"] = "one"
od["2"] = "two"
od["3"] = "three"
od["4"] = "four"
od["5"] = "five"
结果:
OrderedDict([('1', 'one'), ('2', 'two'), ('3', 'three'), ('4', 'four'), ('5', 'five')])