feat(stdlib): implement missing set update and pop methods

This commit is contained in:
Arjun-coder-ops 2026-03-31 00:50:11 +05:30
parent 9a57b281e8
commit d1011abafa
2 changed files with 40 additions and 1 deletions

View File

@ -190,6 +190,29 @@ class set:
def __contains__(self, elem):
return elem in self._a
def pop(self):
if not self._a:
raise KeyError('pop from an empty set')
# dict.popitem() returns (key, value) tuple
k, _ = self._a.popitem()
return k
def difference_update(self, other):
for elem in other:
self.discard(elem)
def intersection_update(self, other):
to_remove = [elem for elem in self if elem not in other]
for elem in to_remove:
self.remove(elem)
def symmetric_difference_update(self, other):
for elem in other:
if elem in self:
self.remove(elem)
else:
self.add(elem)
def __repr__(self):
if len(self) == 0:
return 'set()'

View File

@ -88,3 +88,19 @@ assert not {1,2,3}.isdisjoint({2,3,4})
# a = set()
# b = {*a, 1, 2, 3, *a, *a}
# assert b == {1, 2, 3}
a = {1, 2, 3}
b = a.pop()
assert b in {1, 2, 3}
assert len(a) == 2
a = {1, 2, 3}
a.difference_update({2, 3, 4})
assert a == {1}
a = {1, 2, 3}
a.intersection_update({2, 3, 4})
assert a == {2, 3}
a = {1, 2, 3}
a.symmetric_difference_update({2, 3, 4})
assert a == {1, 4}