From d1011abafa56abf28e46280f47197e2bc212378a Mon Sep 17 00:00:00 2001 From: Arjun-coder-ops Date: Tue, 31 Mar 2026 00:50:11 +0530 Subject: [PATCH] feat(stdlib): implement missing set update and pop methods --- python/builtins.py | 23 +++++++++++++++++++++++ tests/470_set.py | 18 +++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/python/builtins.py b/python/builtins.py index 22991e1b..8a3fa7f1 100644 --- a/python/builtins.py +++ b/python/builtins.py @@ -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()' diff --git a/tests/470_set.py b/tests/470_set.py index 7c339a1a..d3181fd9 100644 --- a/tests/470_set.py +++ b/tests/470_set.py @@ -87,4 +87,20 @@ assert not {1,2,3}.isdisjoint({2,3,4}) # a = set() # b = {*a, 1, 2, 3, *a, *a} -# assert b == {1, 2, 3} \ No newline at end of file +# 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}