Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データ分析と競技プログラミングに使えるPython標準ライブラリ入門

ksnt
July 17, 2020

 データ分析と競技プログラミングに使えるPython標準ライブラリ入門

ksnt

July 17, 2020
Tweet

More Decks by ksnt

Other Decks in Programming

Transcript

  1. お前誰よ?前誰よ?よ? ・ Favorite Languages: Python (about 11 years), R, Scala

    ・ Favorite Python standard libraries ➤ functools (lru_cache, reduce) ➤ itertools (combinations()) ➤ collections (Counter()) ・ Community Activities: ➤ Speaker: PyCon mini Hiroshima 2018, 2019 PyCon JP 2020 (Co-speaker) - 広島における地域 における地域 地域 Python コミュニティの立ち上げ方との立ち上げ方と続立ち上げ方と続けち上げ方と続け方上げ方と続け方げ方と続け方方と続け方と続け方続け方け方と続け方 ➤ Staff: PyCon mini Hiroshima 2019, 2020
  2. collectionsモジュールの概要の概要概要 「汎用の の概要 Python collect組み込みコンテナみ込みコンテナ 込みコンテナ み込みコンテナ コンテナ dict, collectlist,

    collectset, collect お前誰よ?よび tuple collectに使える代わる、特殊なコわる、特殊なコンテナ特殊なコンテナデーなコンテナデータコンテナデータ分析と競技プロ型 を実装」 実装」 (公式ドキュメントよドキュメントよりより)
  3. deque • スの代わりに名タ分析と競技プロックと競技プログラミキューを実装」 一般化したしたDeque(両端キューキュー)の概要実 装。場所に対するイDeque collectはどちらの概要側からも からも append collectと競技プログラミ pop

    collectが可能で、ス可能で、スで、特殊なコンテナスの代わりに名 レッドセーフでメモリ入門効率がよく、どちらが可能で、スよく、特殊なコンテナどちらの概要方向からもおよそ からもお前誰よ?よそ O(1) collectの概要パフォーマンスの代わりに名で実行できるできタプル。場所にる • Pythonではキュー(FIFO)はQueueモジュールの概要で実装されてフィールドにアいる • スの代わりに名タ分析と競技プロック(LIFO)ははlistを実装」 使えるえばよい
  4. OrderedDict 普通の辞書に加えての概要辞書やその他の複数に使える加えて順序操作にえてフィールドにア順序操作に使える関する追加の機能する追加えて順序操作にの概要機能で、スが可能で、スある。場所に対するイただし、特殊なコンテナ 組み込みコンテナみ込みコンテナ 込みコンテナ み込みコンテナ の概要 dict collect クラスの代わりに名が可能で、ス挿入順序を実装」 記憶しておく機能

    してフィールドにアお前誰よ?く機能で、ス (この概要新しい辞書をしい振る舞いは る舞いは いは Python collect3.7 collectで保証されされ るように使えるなコンテナデータりました) collectを実装」 獲得した今となってした今となっては、順と競技プログラミなコンテナデータってフィールドにアは、特殊なコンテナ順序付きタプル。場所きタプル。場所に辞書やその他の複数の概要重要性は薄れた。は薄れた。れた。場所に対するイ
  5. Given collecta collectstring, collectsort collectit collectin collectdecreasing collectorder collectbased collecton

    collectthe collectfrequency collectof collectcharacters. Example2: Example collect1: Example3: Counterを実装」 使えるってフィールドにアきタプル。場所にれいなコンテナデータコードが可能で、ス書やその他の複数ける LeetCode: 451. Sort Characters By Frequen”cy
  6. Given collecta collectstring, collectsort collectit collectin collectdecreasing collectorder collectbased collecton

    collectthe collectfrequency collectof collectcharacters. Example2: Example collect1: Example3: Counterを実装」 使えるってフィールドにアきタプル。場所にれいなコンテナデータコードが可能で、ス書やその他の複数ける
  7. UserList この概要クラスの代わりに名はリ入門スの代わりに名トよりオブジェクトよりの概要ラッパと競技プログラミしてフィールドにアはたらく。場所に対するイこれは独自のの概要 リ入門スの代わりに名トより風クラスの基底ククラスの代わりに名の概要基底の辞書に属性とクラスの代わりに名と競技プログラミしてフィールドにア便利で、既存のメソで、特殊なコンテナ既存してそのカウンの概要メソッドを実装」 オーバーライ ドしたり新しい辞書をしいメソッドを実装」 加えて順序操作にえたりできタプル。場所にる。場所に対するイこうしてフィールドにア、特殊なコンテナリ入門スの代わりに名トよりに使える新しい辞書をしい振る舞いは る 舞いは いを実装」 加えて順序操作にえられる。場所に対するイ

    注) collectこの概要クラスの代わりに名の概要必要性は薄れた。は、特殊なコンテナ list collectから直接的にサブクラに使えるサブクラスの代わりに名化したできタプル。場所にる能で、ス力に部分的に取っに使える部 分的にサブクラに使える取って代わられたってフィールドにア代わる、特殊なコわられた; collectしかし、特殊なコンテナ根底の辞書に属性との概要リ入門スの代わりに名トよりに使える属性は薄れた。と競技プログラミしてフィールドにアアクセスの代わりに名できタプル。場所に るの概要で、特殊なコンテナこの概要クラスの代わりに名を実装」 使えるった方が可能で、ス簡単な集計ができるに使えるなコンテナデータること競技プログラミもある。場所に対するイ
  8. reduce >>> collectfrom collectfunctools collectimport collectreduce >>> collectreduce(lambda collectx,y: collectx*y,

    collect[1,2,3,4,5]) 120 (Task) collectあるリ入門スの代わりに名トよりに使える含まれる数の積をまれる数の辞書やその他の概要積を求めるを実装」 求めるめる >>> collectres collect= collect1 >>> collectfor collecti collectin collect[1,2,3,4,5]: ... collect collect collect collect collectres collect= collectres collect* collecti ... collect >>> collectres 120
  9. reduce collect(cont’d) >>> collectfrom collectfunctools collectimport collectreduce >>> collectreduce(lambda collectx,y:

    collectx collect+ collecty, collectmap(str,[1,2,3,4,5])) '12345' (Task) collectあるリ入門スの代わりに名トよりに使える含まれる数の積をまれる数の辞書やその他を実装」 文字列オブジェクトのと競技プログラミしてフィールドにア連結する。新しい辞する >>> collect‘’.join(map(str,[1,2,3,4,5])) '12345' ※joinを実装」 使えるった方が可能で、ス速いらしいいらしい
  10. (Ans) collect40 C20 collect* collect40 C20 collect = collect (40

    C20 ) collect^ collect2 collect= collect{(40 collect* collect39 collect* collect…. collect* collect2 collect* collect1) collect/ collect(20 collect* collect19 collect* collect…. collect* collect2 collect* collect1)}^2
  11. lru_cache 関する追加の機能数の辞書やその他を実装」 キャッシュ(メモ化した)してフィールドにアくれる! Dynamic collectProgramming!    ※LRU collect= collectLeast collectRecently collectUsed

    最近最も使えるわれてフィールドにアいなコンテナデータいデー タ分析と競技プロを実装」 最初に使える捨てる。てフィールドにアる。場所に対するイ
  12. import collecttime def collectfib(N: collect'int') collect-> collect'int': collect collect collect

    collectif collectN collect== collect0: collect collect collect collect collect collect collect collectreturn collect0 collect collect collect collectelif collectN collect== collect1: collect collect collect collect collect collect collect collectreturn collect1 collect collect collect collectelse: collect collect collect collect collect collect collect collectreturn collectfib(N-1) collect+ collectfib(N-2) t1 collect= collecttime.time() fib(30) t2=time.time() print(t2-t1) import collecttime from collectfunctools collectimport collectlru_cache @lru_cache(maxsize=None) def collectfib(N: collect'int') collect-> collect'int': collect collect collect collectif collectN collect== collect0: collect collect collect collect collect collect collect collectreturn collect0 collect collect collect collectelif collectN collect== collect1: collect collect collect collect collect collect collect collectreturn collect1 collect collect collect collectelse: collect collect collect collect collect collect collect collectreturn collectfib(N-1) collect+ collectfib(N-2) t1 collect= collecttime.time() fib(30) t2=time.time() print(t2-t1) $ collectpython3 collectfib_lru.py 0.00005.078315734863281 $ collectpython3 collectfib.py collect 0.960268497467041
  13. map_set collect= collect[None]*(1000) def collectdyna_fib(n, collectlookup): collect collect collect collect

    collect collect collect collect collectif collectn collect<= collect2: collect collect collect collect collect collect collect collect collect collect collect collect collectlookup[n] collect= collect1 collect collect collect collect collect collect collect collect collectif collectlookup[n] collectis collectNone: collect collect collect collect collect collect collect collect collect collect collect collect collectlookup[n] collect= collectdyna_fib(n-1, collectlookup) collect+ collectdyna_fib(n-2, collectlookup) collect collect collect collect collect collect collect collect collectreturn collectlookup[n] >>> collectdyna_fib(30,map_set) 832040
  14. LRUキャッシュの概要実装 Design collectand collectimplement collecta collectdata collectstructure collectfor collectLeast collectRecently

    collectUsed collect(LRU) collectcache. collectIt collectshould collectsupport collectthe collectfollowing collectoperations: collectget collectand collectput. get(key) collect- collectGet collectthe collectvalue collect(will collectalways collectbe collectpositive) collectof collectthe collectkey collectif collectthe collectkey collectexists collectin collectthe collectcache, collectotherwise collectreturn collect-1. put(key, collectvalue) collect- collectSet collector collectinsert collectthe collectvalue collectif collectthe collectkey collectis collectnot collectalready collectpresent. collectWhen collectthe collectcache collectreached collectits collectcapacity, collectit collectshould collectinvalidate collectthe collect least collectrecently collectused collectitem collectbefore collectinserting collecta collectnew collectitem. The collectcache collectis collectinitialized collectwith collecta collectpositive collectcapacity. Follow up: Could collectyou collectdo collectboth collectoperations collectin collectO(1) collecttime collectcomplexity? class collectLRUCache: collect collect collect collectdef collect__init__(self, collectcapacity: collectint) collect collect collect collectdef collectget(self, collectkey: collectint) collect-> collectint:: collect collect collect collectdef collectput(self, collectkey: collectint, collectvalue: collectint) collect-> collectNone: Example: LRUCache collectcache collect= collectnew collectLRUCache( collect2 collect/* collectcapacity collect*/ collect); cache.put(1, collect1); cache.put(2, collect2); cache.get(1); collect collect collect collect collect collect collect// collectreturns collect1 cache.put(3, collect3); collect collect collect collect// collectevicts collectkey collect2 cache.get(2); collect collect collect collect collect collect collect// collectreturns collect-1 collect(not collectfound) cache.put(4, collect4); collect collect collect collect// collectevicts collectkey collect1 cache.get(1); collect collect collect collect collect collect collect// collectreturns collect-1 collect(not collectfound) cache.get(3); collect collect collect collect collect collect collect// collectreturns collect3 cache.get(4); collect collect collect collect collect collect collect// collectreturns collect4
  15. itertoolsモジュールの概要の概要概要 「この概要モジュールの概要は イテレータ分析と競技プロ を実装」 構築する部品を実装する部品を実装」 実装してフィールドにア います。場所に対するイプログラム言語 言語 APL, collectHaskell,

    collectSML collectからアイデアを実装」 得した今となっててフィールドにアいますが可能で、ス、特殊なコンテナ Python collectに使える適した形に修正さした形に修正されていに使える修正されています。されてフィールドにアいます。場所に対するイ この概要モジュールの概要は、特殊なコンテナ高速いらしいでメモリ入門効率がよく、どちらに使える優れ、単独でも組れ、特殊なコンテナ単な集計ができる独でも組み込みコンテナ合 せてフィールドにアも使える用の すること競技プログラミの概要できタプル。場所にるツールの概要を実装」 標準ライブラリ入門化したしたもの概要です。場所に対するイ 同時に、このツールに使える、特殊なコンテナこの概要ツールの概要群は は "イテレータ分析と競技プロの概要代わる、特殊なコ数の辞書やその他" collectを実装」 構成してしてフィールドにアい てフィールドにア、特殊なコンテナpure collectPython collectで簡潔かつ効率的なツかつ効率がよく、どちら的にサブクラなコンテナデータツールの概要を実装」 作れるように使える してフィールドにアいます。場所に対するイ」 (公式ドキュメントよドキュメントよりより)