code: def explore_segments(self, bounds, activity_type=None, min_cat=None, max_cat=None):
          
          if len(bounds) == 2:
              bounds = (bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1])
          elif len(bounds) != 4:
              raise ValueError("Invalid bounds specified: {0!r}. Must be list of 4 float values or list of 2 (lat,lon) tuples.")
  
          params = {'bounds': ','.join(str(b) for b in bounds)}
  
          valid_activity_types = ('riding', 'running')
          if activity_type is not None:
              if activity_type not in ('riding', 'running'):
                  raise ValueError('Invalid activity type: {0}.  Possible values: {1!r}'.format(activity_type, valid_activity_types))
              params['activity_type'] = activity_type
  
          if min_cat is not None:
              params['min_cat'] = min_cat
          if max_cat is not None:
              params['max_cat'] = max_cat
  
          raw = self.protocol.get('/segments/explore', **params)
          return [model.SegmentExplorerResult.deserialize(v, bind_client=self)
                  for v in raw['segments']]
docs: Returns an array of up to 10 segments.
  
          http://strava.github.io/api/v3/segments/#explore
  
          :param bounds: list of bounding box corners lat/lon [sw.lat, sw.lng, ne.lat, ne.lng] (south,west,north,east)
          :type bounds: list of 4 floats or list of 2 (lat,lon) tuples
  
          :param activity_type: (optional, default is riding)  'running' or 'riding'
          :type activity_type: str
  
          :param min_cat: (optional) Minimum climb category filter
          :type min_cat: int
  
          :param max_cat: (optional) Maximum climb category filter
          :type max_cat: int
  
          :return: An list of :class:`stravalib.model.Segment`.
          :rtype: :py:class:`list`