Как вы удаляете дубликаты из списка, сохраняя порядок?

Переопределить контроллеры Json / JsonResult для возврата JSON.Net:

Это работает с лечением

697
задан martineau 16 April 2018 в 15:29
поделиться

2 ответа

Здесь у Вас есть некоторые альтернативы: http://www.peterbe.com/plog/uniqifiers-benchmark

Самый Быстрый:

def f7(seq):
    seen = set()
    seen_add = seen.add
    return [x for x in seq if not (x in seen or seen_add(x))]

, Почему присваиваются seen.add к seen_add вместо того, чтобы просто звонить seen.add? Python является динамическим языком и разрешением seen.add, каждое повторение является более дорогостоящим, чем разрешение локальной переменной. seen.add, возможно, изменился между повторениями, и время выполнения не достаточно умно для исключения этого. Для избегания рискованных действий это должно проверить объект каждый раз.

, Если бы Вы планируете использование этой функции много на том же наборе данных, возможно, Вы были бы более обеспечены с упорядоченным множеством: http://code.activestate.com/recipes/528878/

O (1) вставка, удаление и членская проверка на операцию.

(Маленькое дополнительное примечание: seen.add() всегда возвраты None, таким образом, or выше там только как способ делать попытку обновления набора, и не как неотъемлемой части логического теста.)

718
ответ дан Georgy 17 April 2018 в 01:29
поделиться
from itertools import groupby
[ key for key,_ in groupby(sortedList)]

список не должен даже быть , отсортировал , достаточное условие - то, что группируются равные значения.

Редактирование: Я предположил, что "сохранение порядка" подразумевает, что список на самом деле заказан. Если дело обстоит не так, то решением от MizardX является правильное.

Общественное редактирование: Это - однако самый изящный способ "сжать дублирующиеся последовательные элементы в единственный элемент".

23
ответ дан ninjagecko 17 April 2018 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: