Pythonモジュールコレクションの基本

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)

Pythonモジュールコレクションの基本

#一般的に使用される在庫および倉庫在庫の移動平均を計算します

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)

Pythonモジュールコレクションの基本

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')])

おすすめ

転載: www.linuxidc.com/Linux/2020-04/162981.htm