ホームページ  >  記事  >  バックエンド開発  >  Python はどのようにマッピングを実装するのでしょうか?

Python はどのようにマッピングを実装するのでしょうか?

(*-*)浩
(*-*)浩オリジナル
2019-06-26 15:57:064257ブラウズ

辞書 dict は Python における重要なデータ構造です。辞書では、各キーが値に対応します。キーと値の関係はマッピングと呼ばれます。各キーがマッピングされているとも言えます。値が優れています。

Python はどのようにマッピングを実装するのでしょうか?

Map はより一般的なデータ型であり、具体的には Python の辞書です。 (推奨される学習: Python ビデオ チュートリアル )

辞書を使用するときは、キーを介して値にどのようにマップされるのかという疑問を持つ必要があります。このキーの値が誰であるか知っていますか?

そこで、私たちはこのアイデアを思いつきました:

リストを使用して、キーと値のオブジェクトを 1 つずつ保存します。検索するときは、リストをたどって、探しているキーを見つけます。 、オブジェクト内の値valueを取り出します。

このアイデアは非常にシンプルで、すぐに実装できます。

ここでは、最初に、カスタマイズ マップを実装するためのコレクション モジュールに含まれる関連する抽象基本クラスである Mapping と MutableMapping を紹介します。クラス。 Mapping には dict 内のすべての不変メソッドが含まれており、MutableMapping 拡張機能にはすべての変数メソッドが含まれていますが、どちらにも 5 つのコア特殊メソッド (getitem、setitem、delitem、len、iter) は含まれていません。つまり、これら 5 つのコア メソッドを実装してデータ構造を使用できるようにすることが目標です。

from collections import MutableMapping

class MyMap(MutableMapping):

    class item():

        def __init__(self,key,value):
            self.key = key
            self.value = value

        def __eq__(self, other):
            return self.key == other.key

        def __ne__(self, other):
            return self.key != other.key

    def __init__(self):
        self.table = []

    def __getitem__(self, item):
        for i in self.table:
            if i.key == item:
                return i.value
        raise KeyError('Key Error: '+ repr(item))

    def __setitem__(self, key, value):
        for i in self.table:
            if i.key == key:
                i.value = value
                return
        self.table.append(self.item(key,value))

    def __delitem__(self, key):
        for n,i in enumerate(self.table):
            if i.key == key:
                self.pop(n)
                return
        raise KeyError('Key Error: '+ repr(key))

    def __len__(self):
        return len(self.table)

    def __iter__(self):
        for i in self.table:
            yield i.key

上記の方法は非常に単純ですが、あまり効率的ではありません。キーのインデックスを見つけるために毎回リストを走査する必要があるため、時間計算量は O(n) です。

Python 関連の技術記事の詳細については、Python チュートリアル 列にアクセスして学習してください。

以上がPython はどのようにマッピングを実装するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。