>  기사  >  백엔드 개발  >  파이썬은 매핑을 어떻게 구현합니까?

파이썬은 매핑을 어떻게 구현합니까?

(*-*)浩
(*-*)浩원래의
2019-06-26 15:57:064257검색

사전 dict는 Python의 중요한 데이터 구조입니다. 사전에서 각 키는 값에 해당합니다. 각 키가 값에 매핑된다고 할 수도 있습니다.

파이썬은 매핑을 어떻게 구현합니까?

맵은 보다 일반적인 데이터 유형이며, 특히 Python에서는 사전입니다. (추천 학습: Python 동영상 튜토리얼)

사전을 사용할 때, 사전을 키를 통해 값에 어떻게 매핑하는지, 이 키의 값이 누구인지 어떻게 알 수 있는지에 대한 질문이 있어야 합니다.

그래서 우리는 다음 아이디어를 생각해 냈습니다.

키-값 객체를 하나씩 저장하려면 목록을 사용하세요. 검색할 때 해당 키가 찾고 있는 키라는 것을 알게 되면, 값 값을 입력합니다.

이 아이디어는 매우 간단하므로 신속하게 구현할 수 있습니다.

여기에서는 먼저 사용자 정의 맵 클래스를 구현하기 위해 컬렉션 모듈에 있는 몇 가지 관련 추상 기본 클래스인 Mapping 및 MutableMapping을 소개합니다. 매핑에는 dict의 모든 불변 메서드가 포함되어 있으며 MutableMapping 확장에는 모든 변수 메서드가 포함되어 있지만 둘 다 getitem, setitem, delitem, len 및 iter의 5가지 핵심 특수 메서드는 포함되어 있지 않습니다. 즉, 우리의 목표는 이 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 Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 파이썬은 매핑을 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.