Checks if a list representing the state of the variables is valid.

def _check_state(self, state):
        """
        Checks if a list representing the state of the variables is valid.
        """
        if not hasattr(state, '__iter__') or isinstance(state, six.string_types):
            raise ValueError('Start state must be a non-string iterable object.')
        state_vars = {s.var for s in state}
        if not state_vars == set(self.variables):
            raise ValueError('Start state must represent a complete assignment to all variables.'
                             'Expected variables in state: {svar}, Got: {mvar}.'.format(svar=state_vars,
                                                                                        mvar=set(self.variables)))
        for var, val in state:
            if val >= self.cardinalities[var]:
                raise ValueError('Assignment {val} to {var} invalid.'.format(val=val, var=var))
        return True