Yeah, this isn't great. What I had in mind is something like (this is untested):

    def flick_to_previous_image(self):
        self._flick_to_image('previous')

    def flick_to_next_image(self):
        self._flick_to_image('next')

    def _flick_to_image(self, direction):
        self.assertTrue(direction in ['previous', 'next'])
        current_image = self.marionette.find_element(*self._current_image_locator)
        self.marionette.flick(current_image,  # target element
                                  '50%', '50%',  # start from middle of the target element
                                  '%s50%' % direction == 'previous' and '-' or direction == 'next' and '+', 0,  # move 50% of width to the left/right
                                  800)  # gesture duration
        self.wait_for_element_displayed(*self._current_image_locator)