mirror of
https://github.com/pocketpy/pocketpy
synced 2026-05-13 05:33:39 +00:00
feat(stdlib): implement missing set update and pop methods
This commit is contained in:
parent
9a57b281e8
commit
d1011abafa
@ -190,6 +190,29 @@ class set:
|
|||||||
def __contains__(self, elem):
|
def __contains__(self, elem):
|
||||||
return elem in self._a
|
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):
|
def __repr__(self):
|
||||||
if len(self) == 0:
|
if len(self) == 0:
|
||||||
return 'set()'
|
return 'set()'
|
||||||
|
|||||||
@ -88,3 +88,19 @@ assert not {1,2,3}.isdisjoint({2,3,4})
|
|||||||
# a = set()
|
# a = set()
|
||||||
# b = {*a, 1, 2, 3, *a, *a}
|
# b = {*a, 1, 2, 3, *a, *a}
|
||||||
# assert b == {1, 2, 3}
|
# 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}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user