Создание пустого списка в 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()
.