При вынимании пустого списка от вызова для установки () в ответе Terhost, Вы получаете немного повышения скорости.
Изменение: найденный = набор ([])
к: найденный = набор ()
Однако Вам не нужен набор вообще.
def unique(items):
keep = []
for item in items:
if item not in keep:
keep.append(item)
return keep
Используя timeit я получил эти результаты:
с набором ([]) - 4.97210427363
с набором () - 4.65712377445
без набора - 3.44865284975
Да, они будут, см. 10.4.5.1 Инициализация статического поля :
Инициализаторы переменных статического поля класса соответствуют последовательности задания, которые выполняются в текстовый порядок, в котором они появляются в объявление класса. Если статический конструктор (раздел 10.11) существует в класс, выполнение статического инициализаторы поля происходят немедленно перед выполнением этого статического конструктор. В противном случае статический инициализаторы полей выполняются в время, зависящее от реализации, до первое использование статического поля этот класс.
При этом, я думаю, было бы лучше выполнить инициализацию внутри инициализатора статического типа (статический конструктор).
На первый взгляд я не был уверен, и мне пришлось попробовать это, чтобы увидеть, компилируется ли оно вообще.
Учитывая это, я бы инициализировал значение в статическом конструкторе .
Хм ... Я удивлен который компилируется (я проверил). Я не знаю никаких гарантий, которые сделали бы это безопасным. Используйте статический конструктор ...
Изменить: я согласен (см. лучший ответ выше ), что он будет работать; но моя идея с кодом - сделать его максимально простым и очевидным. Если не очевидно , что это сработает (а этого не может быть, если вам нужно спросить), тогда не пишите так ...
В частности, проблемы с доверием по порядку полей: