Создание пустого списка в Python

Каков наилучший способ создания нового пустого списка в Python?

l = [] 

или

l = list()

Я спрашиваю об этом по двум причинам:

  • Технические причины, относительно которых быстрее. (создание класса вызывает накладные расходы?)
  • Чтение кода - это стандартное соглашение.

Ответ 1

Вот как вы можете проверить, какая часть кода выполняется быстрее:

% python -mtimeit  "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop

% python -mtimeit  "l=list()"
1000000 loops, best of 3: 0.297 usec per loop

Однако на практике эта инициализация, скорее всего, является чрезвычайно небольшой частью вашей программы, поэтому беспокоиться об этом, вероятно, неправильно.

Считываемость очень субъективна. Я предпочитаю [], но некоторые очень знающие люди, такие как Алекс Мартелли, предпочитают list(), потому что это произносится.

Ответ 2

list() по своей природе медленнее, чем [], потому что

  • есть поиск символа (нет возможности для python знать заранее, если вы не просто переопределяете список как нечто другое!),

  • есть вызов функции,

  • тогда он должен проверить, прошел ли итеративный аргумент (чтобы он мог создавать список с элементами из него) ps. нет в нашем случае, но есть проверка "if"

В большинстве случаев разница в скорости не будет иметь практических различий.

Ответ 3

Я использую [].

  • Это быстрее, потому что обозначение списка является коротким замыканием.
  • Создание списка с элементами должно выглядеть примерно так же, как создание списка без, почему разница должна быть?

Ответ 4

Я не знаю об этом, но, по опыту, мне кажется, что jpcgt на самом деле прав. Следующий пример: если я использую следующий код

t = [];
t = t.append(1);

в интерпретаторе, тогда вызов t дает мне только "t" без какого-либо списка, и если я добавляю что-то еще, например

t = t.append(2);

Я получаю сообщение об ошибке "Объект NoneType" не имеет атрибута "добавить". Если, однако, я создаю список

t = list();

тогда он отлично работает.

Ответ 5

Я бы написал []... хотя я не могу дать никаких подробностей о скорости (я сомневаюсь, что это изменило бы ситуацию, отличную от функции, не нужно было бы выяснять, было ли ей передано генератор или другой итерабельный объект)

Ответ 6

Я был бы осторожен в контексте...

l=[]

НЕ создает список! [] - это список, созданный заранее, и приведенная выше инструкция только создает ссылку на него. И это НЕ постоянный, это изменяемый объект. Например, если вы делаете

def f(l=[]):
    ...

вы обнаружите, что вы не создаете список при каждом вызове f, но вы скорее создали "статическую" переменную l. Правильный способ сделать это -

def(l=list()):
    ...

Правильный способ создать список list().