Список Python по сравнению с Массивом - когда использовать?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

351
задан Corey Goldberg 13 July 2015 в 04:56
поделиться

8 ответов

В основном списки Python очень гибки и могут содержать абсолютно неоднородные, произвольные данные, и они могут быть добавлены к очень эффективно, в амортизировал постоянное время . Если необходимо уменьшить и вырастить время эффективно списка и без стычки, они - способ пойти. Но они используют намного больше пространства, чем массивы C .

Эти array.array тип, с другой стороны, является просто тонкой оберткой на массивах C. Это может содержать только гомогенные данные, весь тот же тип, и таким образом, это использует [только 111] байты памяти. Главным образом необходимо использовать его, когда необходимо представить массив C расширению или системному вызову (например, ioctl или fctnl).

array.array также разумный способ представить изменяемый строка в Python 2.x (array('B', bytes)). Однако Python 2.6 + и 3.x предлагает изменяемое байт строка как bytearray .

Однако, если Вы хотите сделать математика на гомогенном массиве числовых данных, тогда Вы - очень более обеспеченное использование NumPy, который может автоматически векторизовать операции на сложных многомерных массивах.

, Короче говоря : array.array полезно, когда Вам нужен гомогенный массив C данных по причинам кроме выполнения математики .

414
ответ дан Todor Minakov 23 November 2019 в 00:24
поделиться

Почти для всех случаев нормальный список является правильным выбором. Модуль массивов больше похож на тонкую обертку по массивам C, которые дают Вам вид контейнеров со строгим контролем типов (см. документы ), с доступом к большему количеству подобных C типов, таких как / короткое целое без знака со знаком или дважды, которые не являются частью встроенных типов. Я сказал бы, используют модуль массивов, только если Вам действительно нужен он во всей другой палке случаев со списками.

62
ответ дан Etaoin 23 November 2019 в 00:24
поделиться

Модуль массива является видом одной из тех вещей, что у Вас, вероятно, нет потребности в том, если бы Вы не знаете, почему Вы использовали бы его (и обратили бы внимание, что я не пытаюсь сказать это снисходительным способом!). Большую часть времени модуль массива используется для взаимодействия через интерфейс с кодом C. Дать Вам более прямой ответ на Ваш вопрос о производительности:

Массивы более эффективны, чем списки для некоторого использования. Если необходимо выделить массив, который Вы ЗНАЕТЕ, не изменится, то массивы могут быть быстрее и использовать меньше памяти. GvR имеет история оптимизации , в котором модуль массива выходит, чтобы быть победителем (долго чтение, но стоящий того).

, С другой стороны, часть причины, почему списки съедают больше памяти, чем массивы, - то, потому что Python выделит несколько дополнительных элементов, когда все выделенные элементы привыкнут. Это означает, что добавление объектов к спискам быстрее. Таким образом, если Вы планируете добавляющие объекты, список является способом пойти.

TL; DR я только использовал бы массив, если бы у Вас была исключительная потребность оптимизации или необходимо взаимодействовать через интерфейс с кодом C (и не может использовать пирекс ).

48
ответ дан dennisschagt 23 November 2019 в 00:24
поделиться

Мое понимание - то, что массивы хранятся более эффективно (т.е. как непрерывные блоки памяти по сравнению с указателями на объекты Python), но я не знаю ни о каком выигрыше в производительности. Кроме того, с массивами необходимо сохранить примитивы того же типа, тогда как списки могут сохранить что-либо.

13
ответ дан Ben Hoffstein 23 November 2019 в 00:24
поделиться

Стандартные массивы библиотеки полезны для двоичного ввода-вывода, таковы как перевод списка ints к строке, которые запишут в, скажем, волновой файл. Однако как многие уже отметили, если Вы собираетесь сделать какую-либо реальную работу тогда, необходимо рассмотреть использование NumPy.

8
ответ дан giltay 23 November 2019 в 00:24
поделиться

Если Вы собираетесь быть массивами использования, рассматриваете numpy или scipy пакеты, которые дают Вам массивы с намного большей гибкостью.

6
ответ дан Alex Coventry 23 November 2019 в 00:24
поделиться

Массив может только использоваться для определенных типов, тогда как списки могут использоваться для любого объекта.

Массивы могут также только данные одного типа, тогда как список может иметь записи различных типов объектов.

Массивы также более эффективны для некоторого числового вычисления.

5
ответ дан Hortitude 23 November 2019 в 00:24
поделиться

Этот ответ подведет итог почти всех запросов о том, когда использовать Список и Массив:

  1. основным различием между этими двумя типами данных являются операции, которые можно выполнить на них. Например, можно разделить массив на 3, и он разделит каждый элемент массива 3. То же не может быть сделано со списком.

  2. список является частью синтаксиса Python, таким образом, это не должно быть объявлено, тогда как необходимо объявить массив перед использованием его.

  3. можно сохранить значения различных типов данных в (неоднородном) списке, тогда как в Массиве можно только сохранить значения только того же (гомогенного) типа данных.

  4. Массивы, являющиеся богатым техническими возможностями и быстро, это широко используется для арифметических операций и для хранения большого объема данных - сравненный со списком.

  5. Массивы берут меньше памяти по сравнению со списками.

0
ответ дан 23 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: