def _get_listlike_indexer(self, key, axis, raise_missing=False):
o = self.obj<EOL>ax = o._get_axis(axis)<EOL>indexer, keyarr = ax._convert_listlike_indexer(key,<EOL>kind=self.name)<EOL>if indexer is not None and (indexer != -<NUM_LIT:1>).all():<EOL><INDENT>self._validate_read_indexer(key, indexer, axis,<EOL>raise_missing=raise_missing)<EOL>return ax[indexer], indexer<EOL><DEDENT>if ax.is_unique:<EOL><INDENT>if len(ax) or not len(key):<EOL><INDENT>key = self._convert_for_reindex(key, axis)<EOL><DEDENT>indexer = ax.get_indexer_for(key)<EOL>keyarr = ax.reindex(keyarr)[<NUM_LIT:0>]<EOL><DEDENT>else:<EOL><INDENT>keyarr, indexer, new_indexer = ax._reindex_non_unique(keyarr)<EOL><DEDENT>self._validate_read_indexer(keyarr, indexer,<EOL>o._get_axis_number(axis),<EOL>raise_missing=raise_missing)<EOL>return keyarr, indexer<EOL>
Transform a list-like of keys into a new index and an indexer.

Parameters
----------
key : list-like
    Target labels
axis: int
    Dimension on which the indexing is being made
raise_missing: bool
    Whether to raise a KeyError if some labels are not found. Will be
    removed in the future, and then this method will always behave as
    if raise_missing=True.

Raises
------
KeyError
    If at least one key was requested but none was found, and
    raise_missing=True.

Returns
-------
keyarr: Index
    New index (coinciding with 'key' if the axis is unique)
values : array-like
    An indexer for the return object; -1 denotes keys not found