Не как таковое. Вы можете получить аналогичную функциональность, используя разные классы в зависимости от ваших потребностей.
unique
без дополнительных флагов дает результат, аналогичный set
:
unique_value = set(x)
collections.Counter
имитирует return_counts
:
counts = collections.Counter(x)
unique_values = list(counts.keys())
unique_counts = list(counts.values())
Для имитации c return_index
, используйте list.index
на set
или Counter
. Это предполагает, что контейнер представляет собой список
first_indices = [x.index(k) for k in counts]
Чтобы смоделировать return_inverse
, мы посмотрим, как unique
фактически реализован. unique
сортирует ввод, чтобы получить запуск элементов. Аналогичный метод может быть получен через sorted
(или на месте list.sort
) и itertools.groupby
:
s = sorted(zip(x, itertools.count()))
inverse = [0] * len(x)
for i, (k, g) in enumerate(itertools.groupby(s, operator.itemgetter(0))):
for v in g:
inverse[v[1]] = i
Фактически, подход groupby
кодирует все варианты:
s = sorted(zip(x, itertools.count()))
unique_values = []
first_indices = []
unique_counts = []
inverse = [0] * len(x)
for i, (k, g) in enumerate(itertools.groupby(s, operator.itemgetter(0))):
unique_values.append(k)
count = 1
v = next(g)
inverse[v[1]] = i
first_indices.append(v[0])
for v in g:
inverse[v[1]] = i
count += 1
unique_counts.append(count)