Python 標準ライブラリ コレクションの使用方法のチュートリアル
はじめに
Python は、リスト、タプル、辞書、 しかし、大量のデータを扱う場合、これら 4 つのデータ構造は明らかに単純すぎるため、場合によっては、一方向リンク リストとしての list の挿入効率が比較的低くなります。命令された辞書。したがって、現時点では、Python 標準ライブラリによって提供されるコレクション パッケージを使用する必要があります。これには、複数の便利なコレクション クラスが用意されており、これらのコレクション クラスに習熟すると、作成するコードをより Python らしくすることができるだけでなく、効率も向上します。私たちのプログラムが実行されます。
defaultdictの使い方
defaultdict(default_factory)は、通常のdict(辞書)の上にdefault_factoryを追加することで、キー(key)が存在しない場合に、対応する型の値(value)を自動生成します。 default_factory パラメータはリストとして指定できます。 Set、int、およびその他の有効な型。
example1
>>> from collections import defaultdict >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
上記のような一連のリストができました。注意深く観察した結果、実際には 2 つの色しかなく、それぞれの色が複数の値に対応していることがわかりました。 。このリストを辞書(辞書)に変換したいと思います。この辞書のキー(キー)は色に対応し、辞書の値(値)は対応する複数の値を格納するリストに設定されます。色に。この問題を解決するには、defaultdict(list) を使用できます。
# d可以看作一个dict(字典),dict的value是一个list(列表) >>> d = defaultdict(list) >>> for k, v in s: ... d[k].append(v) ... >>> d defaultdict(<class 'list'>, {'blue': [2, 4, 4], 'red': [1, 3, 1]})
example2
上記の例には、{‘blue’: [2, 4, 4], ‘red’: [1, 3, このdefaultdictでは、青色には2つの4が含まれ、赤色には2つの1が含まれていますが、現時点では、この問題を解決するためにdefaultdict(set)を使用することを検討できます。セット (コレクション) とリスト (リスト) の違いは、セット内に同じ要素が存在できないことです。
>>> d = defaultdict(set) >>> for k, v in s: ... d[k].add(v) ... >>> d defaultdict(<class 'set'>, {'blue': {2, 4}, 'red': {1, 3}})
example3
>>> s = 'hello world'
defaultdict(int) の形式を使用して、文字列内の各文字の出現数をカウントします。
>>> d = defaultdict(int) >>> for k in s: ... d[k] += 1 ... >>> d defaultdict(<class 'int'>, {'o': 2, 'h': 1, 'w': 1, 'l': 3, ' ': 1, 'd': 1, 'e': 1, 'r': 1})
OrderedDict の使用法
デフォルトの dict (辞書) は順序付けされていないことはわかっていますが、場合によっては dict の順序を維持する必要がある場合は、 のサブクラスである OrderedDict を使用できます。 dict (サブクラス) ですが、dict に基づいて dict の順序付けされた型を維持します。その使い方を見てみましょう。
example1
>>> from collections import OrderedDict # 无序的dict >>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
これは順序なしの dict (辞書) です。今度は OrderedDict を使用して、この dict を順序付きにします。
# 将d按照key来排序 >>> OrderedDict(sorted(d.items(), key=lambda t: t[0])) OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) # 将d按照value来排序 >>> OrderedDict(sorted(d.items(), key=lambda t: t[1])) OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) # 将d按照key的长度来排序 >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0]))) OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
example2
popitem(last=True) メソッドを使用すると、辞書内のキーと値を LIFO (先入れ、後出し) 順序で削除できます。つまり、最後に挿入されたキーと値を削除できます。 last= False の場合、ペアは FIFO (先入れ先出し) に従って辞書内のキーと値を削除します。
>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2} # 将d按照key来排序 >>> d = OrderedDict(sorted(d.items(), key=lambda t: t[0])) >>> d OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]) # 使用popitem()方法来移除最后一个key-value对 >>> d.popitem() ('pear', 1) # 使用popitem(last=False)来移除第一个key-value对 >>> d.popitem(last=False) ('apple', 4)
example3
move_to_end(key, last=True) を使用して、順序付けされた OrderedDict オブジェクトのキーと値の順序を変更します。このメソッドを使用して、順序付けされた OrderedDict オブジェクト内の任意のキーと値をディクショナリの先頭または末尾に挿入できます。
>>> d = OrderedDict.fromkeys('abcde') >>> d OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)]) # 将key为b的key-value对移动到dict的最后 >>> d.move_to_end('b') >>> d OrderedDict([('a', None), ('c', None), ('d', None), ('e', None), ('b', None)]) >>> ''.join(d.keys()) 'acdeb' # 将key为b的key-value对移动到dict的最前面 >>> d.move_to_end('b', last=False) >>> ''.join(d.keys()) 'bacde'
deque
list を使用してデータを保存する利点は、インデックスによる要素の検索は非常に高速ですが、単一リンクのリスト データ構造であるため、要素の挿入と削除は非常に遅いことです。 Deque は、挿入および削除操作を効率的に実装するための双方向リストであり、キューおよびスタックに適しており、スレッドセーフです。
List はリストの末尾から要素を挿入/削除するための append メソッドと Pop メソッドしか提供しませんが、deque は要素の先頭に要素を効率的に挿入/削除できるようにする appendleft/popleft を追加します。さらに、deque を使用してキューの両端に要素を追加 (追加) またはポップ (ポップ) するアルゴリズムの複雑さは約 O(1) ですが、リスト オブジェクトの操作ではリストの長さとデータの位置を変更します。例 Pop(0) および insert(0, v) 操作の複雑さは O(n) と同じくらい高くなります。 deque の操作は基本的に list の操作と同じであるため、ここでは繰り返しません。
ChainMapの使用
ChainMapは、複数の辞書(辞書)をリストに結合するために使用されます(単なる比喩です)。これは、複数の辞書をマージすることとして理解できますが、更新とは異なり、より効率的です。
>>> from collections import ChainMap >>> a = {'a': 'A', 'c': 'C'} >>> b = {'b': 'B', 'c': 'D'} >>> m = ChainMap(a, b) # 构造一个ChainMap对象 >>> m ChainMap({'a': 'A', 'c': 'C'}, {'b': 'B', 'c': 'D'}) >>> m['a'] 'A' >>> m['b'] 'B' # 将m变成一个list >>> m.maps [{'a': 'A', 'c': 'C'}, {'b': 'B', 'c': 'D'}] # 更新a中的值也会对ChainMap对象造成影响 >>> a['c'] = 'E' >>> m['c'] 'E' # 从m复制一个ChainMap对象,更新这个复制的对象并不会对m造成影响 >>> m2 = m.new_child() >>> m2['c'] = 'f' >>> m['c'] 'E' >>> a['c'] 'E' >>> m2.parents ChainMap({'a': 'A', 'c': 'C'}, {'b': 'B', 'c': 'D'})
Counterの使用法
example1
Counterは、順序付けされていないコンテナーであり、関連する要素の数を数えるために使用されるカウンターと見なすことができます。
>>> from collections import Counter >>> cnt = Counter() # 统计列表中元素出现的个数 >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: ... cnt[word] += 1 ... >>> cnt Counter({'blue': 3, 'red': 2, 'green': 1}) # 统计字符串中元素出现的个数 >>> cnt = Counter() >>> for ch in 'hello': ... cnt[ch] = cnt[ch] + 1 ... >>> cnt Counter({'l': 2, 'o': 1, 'h': 1, 'e': 1})
example2
要素の出現数に応じて要素を返すには、elements() メソッドを使用します。要素の数が 1 未満の場合、要素は任意の順序で返されます。それは無視されます。
>>> c = Counter(a=4, b=2, c=0, d=-2) >>> c Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2}) >>> c.elements() <itertools.chain object at 0x7fb0a069ccf8> >>> next(c) 'a' # 排序 >>> sorted(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b']
most_common(n) を使用して、Counter オブジェクトに表示される上位 n 個の要素を含むリストを返します。
>>> c = Counter('abracadabra') >>> c Counter({'a': 5, 'b': 2, 'r': 2, 'd': 1, 'c': 1}) >>> c.most_common(3) [('a', 5), ('b', 2), ('r', 2)]
namedtuple の使用法
プログラムを読みやすくするために、namedtuple(typename, field_names) を使用してタプル内の要素に名前を付けます。
>>> from collections import namedtuple >>> Point = namedtuple('PointExtension', ['x', 'y']) >>> p = Point(1, 2) >>> p.__class__.__name__ 'PointExtension' >>> p.x 1 >>> p.y 2
上記は Python 標準ライブラリのコレクション使用チュートリアルの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。
