Каков наилучший способ создать новый пустой список в Python?
l = []
или
l = list()
Я спрашиваю об этом по двум причинам:
- Технические причины, по которым быстрее. (создание класса вызывает накладные расходы?)
- Читаемость кода - какой является стандартным соглашением.
python
performance
list
coding-style
timeit
user225312
источник
источник
Ответы:
Вот как вы можете проверить, какой фрагмент кода быстрее:
Однако на практике эта инициализация, скорее всего, является чрезвычайно малой частью вашей программы, поэтому беспокоиться об этом, вероятно, неправильно.
Читаемость очень субъективна. Я предпочитаю
[]
, но некоторые очень знающие люди, такие как Алекс Мартелли, предпочитают,list()
потому что это произносится .источник
list('')
дают[]
вместо['']
?list('abcd')
и все поймешь)list()
медленнее, чем[]
, потому чтоесть поиск по символам (у python нет возможности узнать заранее, если вы не просто переопределите список как нечто другое!),
есть вызов функции,
затем он должен проверить, был ли передан итеративный аргумент (чтобы он мог создать список с элементами из него) ps. нет в нашем случае, но есть проверка "если"
В большинстве случаев разница в скорости не будет иметь практического значения.
источник
list()
медленнее чем[]
!list()
нужно только проверить, был ли вообще какой-либо аргумент ... «проверить, повторяем ли» и «создать список с элементами» просто не бывает; они применяются только при наличии аргумента. Возможно даже, что C-код для[]
вызовов тот же C-код, что иlist()
. В любом случае время (c) будет крошечным по сравнению с (a) + (b).Я использую
[]
.источник
Я действительно не знаю об этом, но по опыту мне кажется, что jpcgt на самом деле прав. Следующий пример: если я использую следующий код
в интерпретаторе, затем вызов t дает мне просто «t» без какого-либо списка, и если я добавляю что-то еще, например
Я получаю сообщение об ошибке «Объект NoneType не имеет атрибута« добавить »». Если, однако, я создаю список
тогда работает нормально.
источник
t.append(1)
модифицируетt
на месте, он ничего не вернуть , ноNone
и вы назначаете этоNone
наt
. Такt
относится теперь кNone
списку, а не к списку. Ваша ошибка здесь заключалась в том, чтобы писатьt=t.append(1)
вместо простоt.append(1)
. Вы заметите такое же поведениеlist()
, поэтому здесь нет никакой разницы.Просто чтобы выделить ответ @Darkonaut, потому что я думаю, что он должен быть более заметным.
new_list = []
илиnew_list = list()
оба в порядке (игнорируя производительность), ноappend()
возвращаютсяNone
, в результате чего вы не можете сделатьnew_list = new_list.append(something
.Я очень озадачен таким решением типа возврата. Тьфу.
источник