Skip to content

Instantly share code, notes, and snippets.

@PhotonQuantum
Created February 10, 2020 11:16
Show Gist options
  • Save PhotonQuantum/fcd0e2fd8f00aa46cf5291096f0585f8 to your computer and use it in GitHub Desktop.
Save PhotonQuantum/fcd0e2fd8f00aa46cf5291096f0585f8 to your computer and use it in GitHub Desktop.
import sys
from collections import OrderedDict
class DedupList(list):
def __init__(self, seq=()):
# print("init")
dic = {} if sys.version_info[1] > 5 else OrderedDict()
seq = list(dic.fromkeys(seq))
self._dedup_set = set(seq)
super().__init__(seq)
def __setitem__(self, key, value):
# print(f"setitem - {key} - {value}")
self._dedup_set.remove(self[key])
# if value not in self._dedup_set: # this breaks item swap
self._dedup_set.add(value)
super().__setitem__(key, value)
def append(self, obj):
# print(f"append - {obj}")
if obj not in self._dedup_set:
self._dedup_set.add(obj)
super().append(obj)
def extend(self, iterable):
# print(f"extend - {iterable}")
for object in iterable:
if object not in self._dedup_set:
self._dedup_set.add(object)
super().append(object)
def insert(self, index: int, obj):
# print(f"insert - {index} - {obj}")
if obj not in self._dedup_set:
self._dedup_set.add(obj)
super().insert(index, obj)
def pop(self, index: int = None):
# print(f"pop - {index}")
index = index if index else -1
item = super().pop(index)
self._dedup_set.remove(item)
return item
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment