Python List против Array - когда использовать?

python arrays list

296210 просмотра

10 ответа

Если вы создаете массив 1d, вы можете реализовать его в виде списка или использовать модуль «массив» в стандартной библиотеке. Я всегда использовал списки для 1d массивов.

По какой причине или обстоятельству я хотел бы использовать вместо этого модуль массива?

Это для оптимизации производительности и памяти, или я упускаю что-то очевидное?

Автор: Corey Goldberg Источник Размещён: 11.11.2019 04:15

Ответы (10)


409 плюса

Решение

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

array.arrayТипа, с другой стороны, это всего лишь тонкая оболочка на массивах C. Он может содержать только однородные данные одного типа, поэтому он использует только sizeof(one object) * lengthбайты памяти. В основном, вы должны использовать его, когда вам нужно представить массив C расширению или системному вызову (например, ioctlили fctnl).

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

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

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

Автор: Dan Lenski Размещён: 06.10.2008 11:11

62 плюса

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

Автор: André Размещён: 06.10.2008 08:24

48 плюса

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

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

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

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

Автор: Jason Baker Размещён: 07.10.2008 02:00

18 плюса

Это компромисс!

плюсы каждого:

список

  • гибкий
  • может быть разнородным

массив (напр .: массив numpy)

  • массив равномерных значений
  • гомогенный
  • компактный (по размеру)
  • эффективный (функциональность и скорость)
  • удобный
Автор: KouchakYazdi Размещён: 30.01.2017 08:18

13 плюса

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

Автор: Ben Hoffstein Размещён: 06.10.2008 08:22

8 плюса

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

Автор: giltay Размещён: 07.10.2008 01:47

6 плюса

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

Автор: Alex Coventry Размещён: 06.10.2008 08:30

5 плюса

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

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

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

Автор: Hortitude Размещён: 06.10.2008 08:25

0 плюса

Важное различие между массивом numpy и списком состоит в том, что срезы массива являются представлениями исходного массива. Это означает, что данные не копируются, и любые изменения в представлении будут отражены в исходном массиве.

Автор: vivek Размещён: 17.07.2018 12:46

0 плюса

Этот ответ суммирует почти все запросы о том, когда использовать List и Array:

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

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

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

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

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

Автор: Dipen Bakraniya Размещён: 10.09.2019 01:26
Вопросы из категории :
32x32