Переход к набору работает только для списков, так что все их элементы могут быть изменены - например, в вашем примере, если c = []
, код, который вы дадите, вызовет исключение. Для не хешируемых, но сопоставимых элементов, наилучшим доступным решением является сортировка списка с последующим использованием itertools.groupby
для извлечения из него уникальных элементов (O (N log N)). Если элементы не являются ни хешируемыми, ни сопоставимыми, ваше единственное решение «последней канавы» - O(N squared)
.
Вы можете закодировать функцию для «унификации» любого списка, который использует наилучший доступный подход, попробовав каждый подход по порядку, с try
/ except
вокруг первого и второго (и return
результата либо в конце предложения try
, либо, элегантно, в предложении else
оператора try
; -).