Created
February 10, 2020 11:16
-
-
Save PhotonQuantum/fcd0e2fd8f00aa46cf5291096f0585f8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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