>  기사  >  백엔드 개발  >  지퍼 방식을 사용하여 사전 방식을 구현한 파이썬의 예제 코드에 대한 자세한 설명

지퍼 방식을 사용하여 사전 방식을 구현한 파이썬의 예제 코드에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-26 09:46:281811검색

이 글에서는 지퍼 방식을 사용하여 사전을 구현하는 python 방법을 주로 소개합니다. 이 글은 상세한 샘플 코드를 제공하므로 필요한 모든 사람들이 찾아올 수 있을 것입니다. 아래에서 함께 살펴보세요.

서문

사전은 해시 테이블이라고도 합니다. 가장 큰 특징은 를 통해 해당 값을 찾는 것입니다. 1) 다음 글에서는 지퍼 방식을 사용하여 파이썬에서 사전을 구현하는 방법을 소개하겠습니다.

Python에서 목록을 사용하여 사전을 구현하는 방법은 무엇입니까?

목록을 사용하여 사전을 구현할 때 가장 큰 문제는 해시 충돌이 발생하는 경우 다른 키를 계산하여 동일한 위치를 얻으려면 어떻게 해야 합니까?

가장 간단한 방법은 지퍼 방식을 사용하는 것입니다.

지퍼 방식을 사용하여 사전 방식을 구현한 파이썬의 예제 코드에 대한 자세한 설명

지퍼 방식: 목록의 각 위치에 다른 목록을 추가합니다. 해시 충돌도 저장할 수 있습니다. 선택한 해시

함수 가 충분하고

num의 수가 충분히 크면 각 목록에 하나의 요소만 있는지 확인할 수 있습니다. 목록. 키를 기준으로 요소의 위치를 ​​계산한 후

을 O(1) 시간으로 달성하는 값을 가져옵니다.


방법예


class MyDict:
 def init(self, num=100): # 指定列表大小
  self._num = num
  self._lst = []
  for _ in range(self._num):
   self._lst.append([])

 def update(self, key, value): # 添加 key-value
  key_index = hash(key) % self._num
  for i, (k, v) in enumerate(self._lst[key_index]):
   if key == k:
    self._lst[key_index][i] = [key, value]
    break
  else:
   self._lst[key_index].append([key, value])

 def get(self, key): # 根据指定的 key 弹出值
  key_index = hash(key) % self._num
  for k, v in self._lst[key_index]:
   if k == key:
    return v
  else:
   raise KeyError('No such {} key'.format(key))

 def pop(self, key): # 根据 key 弹出元素 并且删除
  key_index = hash(key) % self._num
  for i, (k, v) in enumerate(self._lst[key_index]):
   if k == key:
    result = v
    self._lst.pop(i)
    return result
  else:
   raise KeyError('No such {} key'.format(key))

 def getitem(self, key): # 可以通过下标来取值
  key_index = hash(key) % self._num
  for k, v in self._lst[key_index]:
   if k == key:
    return v
  else:
   raise KeyError('No such {} key'.format(key))

 def keys(self): # 取得所有的key
  for index in range(self._num):
   for k, v in self._lst[index]:
    yield k

 def values(self): # 取得所有的 value
  for index in range(self._num):
   for k, v in self._lst[index]:
    yield v

 def items(self): # 取得所有的条目
  for index in range(self._num):
   for item in self._lst[index]:
    yield item

키로 찾아낸 시간은 아래 그림에서 확인할 수 있습니다

지퍼 방식을 사용하여 사전 방식을 구현한 파이썬의 예제 코드에 대한 자세한 설명

위 내용은 지퍼 방식을 사용하여 사전 방식을 구현한 파이썬의 예제 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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