class Bag: # Constructor. def __init__(self): self.uset = USet() # will store (key, [v1, v2, ... , vn]) pairs # String representation of an object for printing. def __str__(self): d = eval('{}'.format(self.uset)) pairs = [] for key, val_list in d.items(): pairs.extend([(key,val) for val in val_list]) return '{}'.format(pairs) def add(self, key, val): pair = self.uset.remove(key) if pair: key, val_list = pair val_list.append(val) else: val_list = [val] self.uset.add(key, val_list) def remove(self, key): pair = self.uset.remove(key) if not pair: return key, val_list = pair val = val_list.pop() if val_list: self.uset.add(key, val_list) return (key, val) def find(self, key): pair = self.uset.find(key) if not pair: return key, val_list = pair return (key, val_list[0]) def find_all(self, key): pair = self.uset.find(key) if not pair: return [] key, val_list = pair return [(key, val) for val in val_list] def keys(self): return self.uset.keys() def size(self): keys = self.keys() size = 0 for k in keys: _, vals = self.uset.find(k) size += len(vals) return size
def test_remove(): uset = USet() uset.add(1, 10) uset.add(2, 20) assert uset.remove(1) == (1,10) assert uset.remove(1) == None assert uset.remove(2) == (2,20)
def __init__(self): '''Initializes member variables. ''' self.uset = USet() # this is the underlying data structure.
class Bag: def __init__(self): '''Initializes member variables. ''' self.uset = USet() # this is the underlying data structure. def __str__(self): '''Returns a string representation of an object for printing. ''' return str(self.uset) def add(self, key, val): '''Adds the pair (key, val) to the Bag. ''' if (self.uset.find(key) == None): self.uset.add(key, [val]) else: valList = self.uset.find(key)[1] valList.append(val) self.uset.remove(key) self.uset.add(key, valList) def remove(self, key): '''Removes a pair with key from the Bag and returns it. Returns None if no such pair exsits. ''' if (self.uset.find(key) == None): return None valList = self.uset.find(key)[1] if (valList != []): returningTuple = (key, valList.pop()) if (valList == []): self.uset.remove(key) return returningTuple else: self.uset.remove(key) def find(self, key): '''Returns a pair from the Bag that contains key; None if no such pair exists. ''' if (self.uset.find(key) == None): return None valList = self.uset.find(key)[1] returningTuple = (key, valList[0]) self.uset.add(key, valList) return returningTuple def find_all(self, key): '''Returns all pairs from the Bag that contains key; None if no such pair exists. ''' if (self.uset.find(key) == None): return [] listOfTuples = list() valList = self.uset.find(key)[1] for val in valList: listOfTuples.append((key, val)) return listOfTuples def size(self): '''Returns the number of pairs currently in the Bag. ''' keyList = self.uset.keys() usetSize = 0 for key in keyList: usetSize = usetSize + len(self.uset.find(key)[1]) return usetSize def keys(self): '''Returns a list of keys in the Bag. ''' return sorted(self.uset.keys())
class Bag: def __init__(self): '''Initializes member variables. >>> bag = Bag() ''' self.uset = USet() # this is the underlying data structure. def __str__(self): '''Returns a string representation of an object for printing. >>> bag = Bag() >>> print(bag) # prints bag.__str__() ''' return str(self.uset) def add(self, key, val): '''Adds the pair (key, val) to the Bag. >>> bag = Bag() >>> bag.add(1, 10) >>> bag.size() 1 >>> bag.add(1, 10) >>> bag.size() 2 >>> bag.add(1, 20) >>> bag.size() 3 >>> bag.add(2, 20) >>> bag.size() 4 ''' if self.uset.find(key) == None: val_list = [val] self.uset.add(key, val_list) else: val_list = self.uset.remove(key)[1] val_list.append(val) self.uset.add(key, val_list) def remove(self, key): '''Removes a pair with key from the Bag and returns it. Returns None if no such pair exsits. >>> bag = Bag() >>> bag.add(1, 10) >>> bag.add(1, 10) >>> bag.add(1, 20) >>> bag.add(2, 20) >>> bag.remove(1) (1,10) # could be any of the 3 pairs with key == 1. >>> bag.remove(2) (2,20) >>> bag.remove(20) >>> ''' checkItem = self.uset.find(key) if (checkItem == None): return None else: val_list = self.uset.remove(key)[1] val = val_list.pop(0) if (len(val_list) != 0): self.uset.add(key, val_list) return (key, val) def find(self, key): '''Returns a pair from the Bag that contains key; None if no such pair exists. >>> bag = Bag() >>> bag.add(1, 10) >>> bag.add(1, 10) >>> bag.add(1, 20) >>> bag.add(2, 20) >>> bag.find(1) (1,10) # could be any of the 3 pairs with key == 1. >>> bag.find(2) (2,20) >>> bag.find(20) >>> ''' checkItem = self.uset.find(key) if (checkItem == None): return None else: return (key, checkItem[1][0]) def find_all(self, key): checkItem = self.uset.find(key) if (checkItem == None): return [] else: key_val_list = [] for val in checkItem[1]: key_val_list.append((key, val)) return key_val_list def size(self): '''Returns the number of pairs currently in the Bag. >>> bag = Bag() >>> bag.size() 0 >>> bag.add(1, 10) >>> bag.add(2, 20) >>> bag.size() 2 >>> bag.add(2, 30) >>> bag.size() 3 ''' size = 0 for key in self.keys(): size += len(self.uset.find(key)[1]) return size def keys(self): '''Returns a list of keys in the Bag. >>> bag = Bag() >>> bag.add(1, 10) >>> bag.add(1, 10) >>> bag.add(1, 20) >>> bag.add(2, 20) >>> sorted(bag.keys()) [1, 2] ''' return self.uset.keys()
def __init__(self): self.uset = USet() # will store (key, [v1, v2, ... , vn]) pairs
def test_find(): uset = USet() uset.add(1, 10) uset.add(2, 20) assert uset.find(1) == (1,10) assert uset.size() == 2 assert uset.find(1) == (1,10) assert uset.size() == 2 assert uset.find(2) == (2,20) assert uset.size() == 2 assert uset.find(10) == None assert uset.size() == 2
def test_keys(): uset = USet() assert uset.keys() == [] uset.add(1, 10) assert uset.keys() == [1] uset.add(2, 20) assert uset.keys() == [1,2] uset.remove(2) assert uset.keys() == [1] uset.remove(1) assert uset.keys() == []
def test_add(): uset = USet() assert uset.add(1, 10) == True assert uset.add(2, 20) == True assert uset.add(1, 10) == False
def test_size(): uset = USet() assert uset.size() == 0 uset.add(1, 10) assert uset.size() == 1 uset.add(2, 20) assert uset.size() == 2 uset.add(2, 20) assert uset.size() == 2 uset.remove(10) assert uset.size() == 2