code: def remove(self, elem):
          
          try:
              return PDeque(self._left_list.remove(elem), self._right_list, self._length - 1)
          except ValueError:
              # Value not found in left list, try the right list
              try:
                  # This is severely inefficient with a double reverse, should perhaps implement a remove_last()?
                  return PDeque(self._left_list,
                                 self._right_list.reverse().remove(elem).reverse(), self._length - 1)
              except ValueError:
                  raise ValueError('{0} not found in PDeque'.format(elem))
docs: Return new deque with first element from left equal to elem removed. If no such element is found
          a ValueError is raised.
  
          >>> pdeque([2, 1, 2]).remove(2)
          pdeque([1, 2])