В чем разница между массивами, списками и словарями в Python?
В последнее время я поймал себя на том, что списки и массивы взаимозаменяемы. Если говорить конкретно о Python, оба они кажутся похожими. Даже словари, по крайней мере, выполняют ту же цель хранения информации в структуре, которую вы можете перебирать. Но есть и список различий между ними. Именно об этом сегодня и пойдет речь в этой статье.
Сначала мы опишем массивы, списки и словари, затем, наконец, мы используем краткое сравнение различий между ними тремя.
Единственное сравнение, которое мы не будем проводить, — это синтаксис, поскольку известно, что для работы им потребуется другой синтаксис. Итак, без дальнейших промедлений, давайте погрузимся прямо в.
Массивы
Массив — это особый тип переменной, которая может содержать более одного значения одновременно. Для этого он создает форму списка, где вы можете перебирать все различные значения.
Для сортировки по этому типу существуют индексы. Индекс просто присваивает число (начиная с нуля), которое придает массиву своего рода предопределенный порядок, основанный на добавлении значений. Вы можете отсортировать его позже с помощью метода sort. Вы также можете добавить и удалить позже.
Единственное, что вы должны помнить о массивах в Python, это то, что тип Array автоматически не является типом данных, который вы можете использовать. Вы должны импортировать тип массива. Но поскольку массиву присваивается индекс, к этому типу можно добавлять повторяющиеся значения.
Списки
Список — это тип данных, который позволяет хранить несколько значений или элементов в одной переменной. Это автоматически тип данных в Python, поэтому вы можете начать использовать его, когда захотите.
Списки упорядочены по времени их ввода в список, но это можно изменить позже. Списки также индексируются, начиная с нуля и подсчитывая, чтобы вы могли перебирать список.
Поскольку каждому значению присваивается неявный индекс, в списке могут быть повторяющиеся значения. Вы также можете отсортировать список с помощью метода сортировки.
Одной из уникальных возможностей списка является то, что он может содержать значения разных типов. Это означает, что вы можете хранить такие значения, как строки и целые числа, в одном списке.
Словари
Словарь — это еще один тип данных, который позволяет хранить несколько значений в одном типе данных. Как и в двух других обсуждаемых типах, словари имеют предопределенный порядок элементов, основанный на том, когда они добавляются к переменной.
Однако одно большое различие между типом данных словаря заключается в том, что он не использует индекс. Вместо этого значения хранятся в паре ключ-значение. Если подумать о ключ:значение , это больше похоже на то, что будет делать запись в базе данных. Каждому значению предшествует тип значения, которым оно является. Этот тип данных также гарантирует, что не может быть повторяющихся значений.
Массивы против. Списки против. Словари
Теперь, когда мы знаем немного больше о каждом типе данных, давайте посмотрим на некоторые различия между ними. Во-первых, как обсуждалось ранее, для использования массива необходимо импортировать специальный модуль.
Как для списков, так и для словарей вы можете использовать типы данных как обычное расширение Python, ничего особенного там делать не нужно.
В массиве все типы данных должны иметь одинаковые значения. Например, если вы начинаете со строк, даже целое число должно быть в строковом формате, поскольку все значения должны быть одного типа данных.
В списке могут быть разные типы данных для значений. Словари имеют ключевую функцию, поэтому фактическое значение не так важно, как сопоставление ключей между значениями.
И массивы, и списки используют индексы, чтобы различать значения, хранящиеся в определенном порядке. Но вместо этого словарь использует key:value . Это означает, что массивы и списки могут допускать дублирование значений, чего нет в словарях. Эти индексы также используются в качестве их порядка, поэтому вы можете изменить порядок с помощью «обратного» метода как в массивах, так и в списках.
У словаря нет обратного метода, так как у него ключи со значениями вместо индекса. Еще одно замечание: словарь не гарантирует, что порядок вводимой информации всегда будет оставаться неизменным. В отличие от массивов и списков, которые сохраняют свой порядок, поскольку нумеруются по индексам.
Массивы также можно использовать для непосредственной обработки арифметических операций. Это единственный тип данных, который так непосредственно обрабатывает операции. Другие могут выполнять математические операции с данными, но это не так прямолинейно, как с массивом.
Со списком вам не нужно перебирать каждое значение для печати. Вы можете просто распечатать весь список сразу. Это не похоже на массив, где вам нужно перебирать значения. Вам также нужно будет просмотреть словарь. В противном случае вы можете создать временный список значений словаря, а затем распечатать их сразу. Но без дополнительной работы вам нужно будет перебрать значения, как для массива.
Последний элемент, который мы рассмотрим, — задействованная память. Таким образом, списки, как правило, потребляют больше памяти, поскольку они сделаны так, чтобы их было проще добавлять и удалять из списка. Из-за этого они также предпочитают более короткие последовательности данных. Для массивов они предназначены для хранения более длинных последовательностей данных, поэтому они, как правило, более компактны.
Словари предназначены для хранения больших объемов данных, но они также могут потреблять больше памяти, чем вам нужно, и им может не хватить выделенной памяти.
Вывод
Это был только краткий обзор списков, массивов и словарей. Хотя все они содержат несколько значений в одной переменной, все они также разные. Все, что мы обсуждали, касается только Pythonic-версий этих типов данных.
В основном, статья была предназначена для того, чтобы просто воспользоваться шансом вспомнить, почему типы данных такие разные, и даже немного о том, почему выбирать один над другим, помня об их возможностях. Мы просто не смотрели на различия в синтаксисе, главным образом потому, что понимаем, что все они должны быть разными, чтобы существовать.
В Python вы можете рассматривать в основном либо списки, либо словари, в зависимости от типа данных, которые вы храните, просто потому, что для работы с массивом потребуется специальный импорт. Однако у каждого из этих типов данных есть свои преимущества и причины, по которым их следует выбирать.
Я надеюсь, что вы нашли это напоминание интересным, и, пожалуйста, не стесняйтесь комментировать любые различия, которые я упустил. До следующего раза, ура!
Отличия понятий «список» и «массив»?
конкретизируй задачу, или ты потеоритизировать в вечер пятничной-среды пришел?
(можно миллион примеров когда список будет массивом и наоборот в обоих языках привести(двумерный массив для начала как пример), с ошибками из этого)
missxu
( 31.10.18 19:24:27 MSK )
madcore ★★★★★
( 31.10.18 19:59:01 MSK )
А еще в JS это некоторые называют объектом. У JS с терминологией проблемы.
Я как-то привык оперировать понятиями из С-подобных языков. Где массив — это
int array[10];
а список это, если я правильно помню плюсы, как-то так
struct List < int val; List * next; >; a = new List;
А интерпретации в питоне и в JS — по мне так все это массивы. К ним можно, в общем случае, обращаться и как стильно-модно-моложежно array.item, так и по класике массивов array[‘item’].
l0stparadise ★★★★★
( 31.10.18 20:04:35 MSK )
Ответ на: комментарий от l0stparadise 31.10.18 20:04:35 MSK
а список это, если я правильно помню
Это односвязный список.
RazrFalcon ★★★★★
( 31.10.18 20:12:00 MSK )
Ответ на: комментарий от l0stparadise 31.10.18 20:04:35 MSK
anonymous
( 31.10.18 20:13:11 MSK )
Оооой, дэтышкии.. во веремена моей молодусти онож как було.. аррэй это когда в памяти кусок, а линкед лист это когда прых-прых по памяти. Окей?
Deleted
( 31.10.18 20:16:35 MSK )
Это зависит от принятой в языке терминологии. Часто под списком понимают односвязный список с O(n) random access, а под массивом — структуру, элементы которой расположены в памяти последовательно с O(1) random access.
theNamelessOne ★★★★★
( 01.11.18 14:04:23 MSK )
В скриптопараше поди и то и это вообще через хешмапы реализовано.
vazgen05 ★★★
( 01.11.18 14:13:15 MSK )
по сути получается, что арэи типизирован, а список хранит всё что в него сунешь
anonymous
( 01.11.18 14:52:40 MSK )
Ответ на: комментарий от anonymous 01.11.18 14:52:40 MSK
по сути получается, что арэи типизирован, а список хранит всё что в него сунешь
Да, только арэи не в самом питоне, а сбоку.
madcore ★★★★★
( 01.11.18 14:54:51 MSK )
Ответ на: комментарий от madcore 01.11.18 14:54:51 MSK
ну так ничего доставлять не нужно, в builtin нет, но простого импорта достаточно
anonymous
( 01.11.18 15:03:09 MSK )
Ответ на: комментарий от l0stparadise 31.10.18 20:04:35 MSK
А еще в JS это некоторые называют объектом
Так там всё на ассоциативных массивах и они могут обладать поведением, т.е. вполне себе объекты.
WitcherGeralt ★★
( 01.11.18 16:13:18 MSK )
Понятие массив шире, а список — его подмножество. Если конкретно в питоне и жопоскрипте, то да, list примерно равен Array.
WitcherGeralt ★★
( 01.11.18 16:22:59 MSK )
Последнее исправление: WitcherGeralt 01.11.18 16:24:43 MSK (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt 01.11.18 16:22:59 MSK
Понятие массив шире, а список — его подмножество.
Но ведь это вопрос терминологии в контектсте конкретного языка.
docpro
( 02.11.18 12:03:54 MSK )
Ответ на: комментарий от docpro 02.11.18 12:03:54 MSK
Поэтому я и отправил товарища читать вики.
WitcherGeralt ★★
( 02.11.18 12:25:54 MSK )
Ответ на: комментарий от WitcherGeralt 01.11.18 16:13:18 MSK
anonymous
( 02.11.18 13:02:37 MSK )
Ответ на: комментарий от anonymous 02.11.18 13:02:37 MSK
Если пикча призвана опровергнуть сказанное мной, то ты, видимо, меня не понял.
WitcherGeralt ★★
( 02.11.18 13:13:03 MSK )
в общем случае, массив хранит порядок элементов, список хранит только состав как множество и может вернуть в любом другом порядке
anonymous
( 03.11.18 18:30:47 MSK )
Ответ на: комментарий от WitcherGeralt 01.11.18 16:22:59 MSK
Понятие массив шире, а список — его подмножество
Нет. В массиве нельзя вставить элемент без перезаписи хвоста массива.
monk ★★★★★
( 03.11.18 23:06:44 MSK )
Ответ на: комментарий от anonymous 03.11.18 18:30:47 MSK
список хранит только состав как множество и может вернуть в любом другом порядке
Откуда такие странные сведения? Список всегда упорядочен.
monk ★★★★★
( 03.11.18 23:07:27 MSK )
Ответ на: комментарий от monk 03.11.18 23:06:44 MSK
Омг, где, когда, какая вставка? Массив это общее понятие для структурированного набора данных, они разные бывают. Хз про какой именно ты язык, но я говорю о понятии вне рамок конкретного языка.
WitcherGeralt ★★
( 03.11.18 23:47:26 MSK )
Последнее исправление: WitcherGeralt 03.11.18 23:48:14 MSK (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt 03.11.18 23:47:26 MSK
Массив это общее понятие для структурированного набора данных, они разные бывают. Хз про какой именно ты язык, но я говорю о понятии вне рамок конкретного языка.
Особенностью массива как структуры данных (в отличие, например, от связного списка) является константная вычислительная сложность доступа к элементу массива по индексу. Массив относится к структурам данных с произвольным доступом.
Под массив выделяется непрерывный блок памяти
Для списка оба этих утверждения ложны. Поэтому список никак не может являться частным случаем массива.
monk ★★★★★
( 04.11.18 07:58:04 MSK )
Последнее исправление: monk 04.11.18 07:58:15 MSK (всего исправлений: 1)
Ответ на: комментарий от monk 04.11.18 07:58:04 MSK
В статье рассматривается именно array, т.е. индексный массив (там даже перенаправление такое есть), но упоминается и разреженный массив и ассоциативный.
Таким образом в русском языке массив это больше чем просто array. Очень часто встречал использование слова «массив» в качестве обобщающего термина для структурированных наборов данных, сам так его использую и не вижу смысла исключать из этого множества список.
WitcherGeralt ★★
( 04.11.18 13:12:37 MSK )
У слова «список» нет однозначной трактовки. Массив это последовательная область в памяти, в которой лежат элементы одинакового размера.
Legioner ★★★★★
( 04.11.18 13:37:10 MSK )
Ответ на: комментарий от anonymous 03.11.18 18:30:47 MSK
в общем случае, массив хранит порядок элементов, список хранит только состав как множество и может вернуть в любом другом порядке
в общем случае это утверждение чцшь, так как этот анонимус путает список (list) и множество (set).
Вообще, в этой теме наболтали чепухи. Лучше читать документацию по интересующему языку программирования.
Если конкретно, то массивы в JavaScript являются списками, хоть и называются массивами в документации. При обращении к элементами по индексу их можно считать массивами, а при обращении другим способом — списками. То есть, толкование зависит от контекста. Обращение по индексу — массив, не по индексу — не массив.
var x = [];//объявляем массив, первоначально пустой
x.push (‘a’);//обращение как к списку — добавляем элемент
var y = x[0];//обращение как к массиву — получаем элемент по индексу
var z = x.shift();//обращение как списку, он становится пустым.
Итак, один и тот же объект можно считать массивом или списком в зависимости от использования. То же относится и к Python, но не ко всем языкам.
Чем отличается массив от списка Python – таблица сравнения
Массивы и списки Python являются важной структурой данных Python. И список, и массив используются для хранения данных в Python. Эти структуры данных позволяют нам индексировать, нарезать и повторять. Но они отличаются друг от друга. В этом руководстве мы узнаем существенные различия между списком и массивом Python.
Вступление
Как мы знаем, Python имеет обширные структуры данных, такие как списки, кортежи, наборы и словари, которые предоставляют множество возможностей и функций. Списки являются наиболее эффективной и простой в использовании структурой данных в Python.
С другой стороны, Python не предоставляет встроенной поддержки массива. Нам нужно импортировать модуль массива, или использовать модуль массива из пакета NumPy в программе Python. И это основное различие между массивом и списком. Прежде чем углубиться в эту тему, давайте кратко познакомимся с обеими структурами данных.
Список
Список в Python – это встроенная линейная структура данных Python. Он используется для последовательного хранения данных. Мы можем выполнить несколько операций для вывода списка, например индексацию, итерацию и нарезку. Список включает следующие функции:
- Элементы списка заключаются в квадратные скобки, а каждый элемент отделяется запятой(,).
- Это изменяемый тип, что означает, что мы можем изменять элементы списка после их создания.
- Списки упорядочены, элементы хранятся в определенном порядке. Мы можем использовать индексацию для доступа к элементу списка.
- Мы можем хранить элементы с разными типами данных и комбинировать строки, целые числа и объекты в одном списке.
Ниже приведены примеры списка.
list = [31, 60, 19, 12] print(list) print(type(list))
[31, 60, 19, 12]
# creating a list containing elements # belonging to different data types list1 = [1,"Yash",['a','e']] print(list1)
[1, 'Yash', ['a', 'e']]
В приведенном выше списке первым элементом является целое число; второй – это строка, а третий – список символов.
Массивы
Массив в Python – это также линейная структура данных, в которой хранятся данные. Он также упорядочен, изменяем и заключен в квадратные скобки. Он может хранить неуникальные элементы. Но есть ограничения на хранение значений разных типов данных.
Для работы с массивом в Python нам нужно импортировать либо модуль массива, либо Numpy.
import array as arr or import numpy as np
Элементы размещаются в непрерывной области памяти, что позволяет нам легко изменять, добавлять, удалять и получать доступ к элементу. Более того, нам нужно указать тип данных. Давайте разберемся в следующих примерах.
Import array as arr array_1 = arr.array("i", [31, 60,19, 12]) print(array_1) print(type(array_1))
array(‘i’, [31, 60, 19, 12])
Пример – 2: Использование массива Numpy
import numpy as np array_sample = np.array(["str", 'sunil', 'sachin', 'megha', 'deepti']) print(array_sample) print(type(array_sample))
[‘numbers’ ‘sunil’ ‘sachin’ ‘megha’ ‘deepti’]
Мы указали тип строки и сохранили строковое значение.
Разница между массивом и списком
Здесь мы обсудим различия между массивом и списком.
Список | Массив | |
---|---|---|
1. | В списке могут храниться значения разных типов. | Он может состоять только из значений одного типа. |
2. | Список не может обрабатывать прямые арифметические операции. | Массив может напрямую обрабатывать арифметические операции. |
3. | Списки представляют собой встроенную структуру данных, поэтому нам не нужно их импортировать. | Перед работой с массивом нам необходимо импортировать его модуль. |
4. | Списки менее совместимы, чем массивы для хранения данных. | Массивы более совместимы, чем список. |
5. | Он потребляет большой объем памяти. | Это более компактный по объему памяти по сравнению со списком. |
6. | Подходит для хранения более длинной последовательности элементов данных. | Подходит для хранения более короткой последовательности элементов данных. |
7. | Мы можем распечатать весь список, используя явный цикл. | Мы можем распечатать весь список без использования явного цикла. |
8. | Он может быть вложенным, чтобы содержать различные типы элементов. | Он может содержать любые вложенные элементы одинакового размера. |
Мы обсудили различия между массивом и списком. Оба типа данных важны в Python, и у обоих есть некоторые ограничения. Массивы обычно используются для анализа данных.
разница list и array
Нет, в некоторых местах эти слова используют взаимозаменяемо. «Истинного» списка не существует как понятия в принципе, но tuple неизменяем, поэтому в кандидаты не годится. Вряд ли вам кто-то даст ответ на этот вопрос, поэтому проще создать миллион элементов и посмотреть расход памяти, это не так сложно; я не думаю, что для вас это должно иметь разницу, пока вы реально не уперлись в память.
9 дек 2015 в 9:26
да, соглашусть, что многие языки путают эти понятия. Но все же, array — это обычно один непрерывный кусок памяти, а list — это часто связанный список. Исходя из этого, array обычно потребляет меньше памяти, так как списку нужно хранить указатель на следующий элемент.
9 дек 2015 в 9:37
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Строго говоря, связный список и массив — это различные структуры данных, которые не привязаны к конкретному языку программирования.
Массив
Массив — это совокупность однотипных данных, расположенных непрерывно в памяти. Доступ к элементу осуществляется по индексу за O(1) — мы обращаемся непосредственно к нужному участку памяти.
Связанный список
Доступ к элементу в связном списке в среднем занимает O(N) путем перебора элементов в поисках нужного. Способы доступа к элементам отличаются по реализации и от языка программирования. Например, на Java в стандартном классе LinkedList в зависимости от ситуации проход элементов может начинаться как с начала, так и с конца списка. И поиск элемента может осуществляться как по индексу, так и по сравнению элементов.
Связный список требует больших расходов памяти при прочих равных условиях за счет хранения указателей на следующий/предыдущий элементы и особенностей внутренней реализации.
Что касается Python: согласно документации:
Internally, a list is represented as an array; the largest costs come from growing beyond the current allocation size (because everything must move), or from inserting or deleting somewhere near the beginning (because everything after that must move).
Как видим, внутренне list представляет собой массив, для tuple — аналогично.