Список и массив в чем разница python
Перейти к содержимому

Список и массив в чем разница 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 — аналогично.

Python.v.JavaScript

JavaScript for Pythonistas. Python for JavaScripters

Списки / массивы

Стандартная структура данных для хранения нескольких элементов в определённом порядке в Python называется списком ( list ), в JavaScript называется массивом ( Array ).

my_list = [3, 2, 10, "Hello"] my_list
[3, 2, 10, 'Hello']
var my_array = [3, 2, 10, "Hello"];my_array;
[ 3, 2, 10, 'Hello' ]
my_list = list('Hello!') my_list
['H', 'e', 'l', 'l', 'o', '!']
var my_array = Array(1, 2, 3, "Hello");my_array;
[ 1, 2, 3, 'Hello' ]
var my_array = new Array(1, 2, 3, "Hello");my_array;
[ 1, 2, 3, 'Hello' ]
var my_array = new Array(4);my_array;
var my_array = new Array("4");my_array;
var my_array = new Array("Hello!");my_array;
[ 'Hello!' ]

В JavaScript массивы можно создавать, используя функцию Array (со словом new или без него: эффект одинаковый). Если эта функция получает в качестве аргумента одно целое число, то это число принимается за длину массива, который нужно создать, при этом создаётся массив с пустыми слотами. В иных случаях (несколько аргументов, аргумент-строка) создается массив, элементами которого являются перечисленные аргументы. Из-за непоследовательного поведения этой функции и получающихся массивов с пустыми слотами этот метод является не рекомендуемым, подробнее см. в YDKJS.

my_list = [3, 2, 10, "Hello"] my_list[0]
my_list[1]
my_list[-1]
'Hello'
var my_array = [3, 2, 10, "Hello"];my_array[0];
my_array[1];
my_array[my_array.length-1];
Hello
my_list = [2, 3, 10] my_list["0"] 
Exception: TypeError list indices must be integers or slices, not str
var my_array = [2, 3, 10];my_array["0"];

В JavaScript массивы являются частным случаем объектов, а объекты индексируются строками. Числовые индексы неявно преобразуются в строки.

my_list = [3, 2, 10, "Hello"] my_list[0] = 100 my_list
[100, 2, 10, 'Hello']
var my_array = [3, 2, 10, "Hello"]; my_array[0] = 100;my_array;
[ 100, 2, 10, 'Hello' ]
my_list = [3, 2, 10, "Hello"] len(my_list)
var my_array = [3, 2, 10, "Hello"];my_array.length;
my_list = [3, 2, 10, "Hello"] my_list.append(5) my_list
[3, 2, 10, 'Hello', 5]
var my_array = [3, 2, 10, "Hello"]; my_array.push(5);my_array;
[ 3, 2, 10, 'Hello', 5 ]
my_list = [3, 2] my_list.extend([12, 20]) my_list
[3, 2, 12, 20]
var my_array = [3, 2]; my_array.push(12, 20);my_array;
[ 3, 2, 12, 20 ]
my_list = [3, 2, 10, "Hello"] other_list = [1, 2, 3] my_list.extend(other_list) my_list
[3, 2, 10, 'Hello', 1, 2, 3]
var my_array = [3, 2, 10, "Hello"]; var other_array = [1, 2, 3]; my_array.push.apply(my_array, other_array);my_array;
[ 3, 2, 10, 'Hello', 1, 2, 3 ]
var my_array = [3, 2, 10, "Hello"]; var other = [1, 2, 3]; Array.prototype.push.apply(my_array, other);my_array;
[ 3, 2, 10, 'Hello', 1, 2, 3 ]
function extend(arr, other) < /* you should include a test to * check whether other_array really * is an array */ other.forEach(function(v) < arr.push(v); >); > var my_array = [3, 2, 10, "Hello"]; var other_array = [1, 2, 3]; extend(my_array, other_array);my_array;
[ 3, 2, 10, 'Hello', 1, 2, 3 ]

Это наиболее эффективный способ расширения списка в случае, если второй список очень большой. В отличие от остальных методов, здесь не приходится передавать все элементы второго списка в качестве аргументов функции.

var my_array = [3, 2, 10, "Hello"]; var other_array = [1, 2, 3]; my_array.push(. other_array);my_array;
[ 3, 2, 10, 'Hello', 1, 2, 3 ]
first_list = [1, 2, 3] second_list = ["Hello", "World"] new_list = first_list + second_list new_list
[1, 2, 3, 'Hello', 'World']
first_array = [1, 2, 3]; second_array = ["Hello", "World"]; new_array = first_array.concat(second_array);new_array;
[ 1, 2, 3, 'Hello', 'World' ]
my_list = [2, 10, 15] del my_list[1] my_list
[2, 15]
my_list[1]
len(my_list)
var my_array = [2, 10, 15]; delete my_array[1];my_array;
[ 2, , 15 ]
my_array[1];
undefined
my_array.length;
my_list = [1, 2, 10] my_list.clear() my_list
var my_array = [1, 2, 10] my_array.length = 0my_array;
my_list = [1, 20, 10] my_list[3] 
Exception: IndexError list index out of range
var my_array = [1, 20, 10]my_array[3];
undefined
my_list = [1, 2, 10] my_list[5] = 100 
Exception: IndexError list assignment index out of range
var my_array = [1, 2, 10] my_array[5] = 100my_array;
[ 1, 2, 10, , 100 ]
my_array[3];
undefined
my_array[5];
my_list = [1, 7, 10] 1 in my_list
True
7 in my_list
True
10 in my_list
True
2 in my_list
False
"1" in my_list
False

Оператор in для списков проверяет, находится ли элемент в списке.

list_like_dict = < 0: 1, 1: 7, 2: 10 >1 in list_like_dict
True
7 in list_like_dict
False
10 in list_like_dict
False
2 in list_like_dict
True
"1" in list_like_dict
False

Если сделать словарь, похожий на список (с числовыми ключами), то оператор in будет проверять, находится ли данный элемент среди индексов (как это всегда происходит со словарями). Примерно так работает аналогичный оператор в JavaScript.

var my_array = [1, 7, 10];1 in my_array;
true
7 in my_array;
false
10 in my_array;
false
2 in my_array;
true
"1" in my_array;
true

Поскольку массив в JavaScript — это частный случай объекта (то есть штуки, похожей на словарь), in проверяет, есть ли данный элемент среди индексов (ключей), а не среди значений. См. этот ответ по поводу проверки на наличие элемента среди значений.

my_list = [0, 10, 20, 30, 40, 50, 60] my_list[2:4]
[20, 30]
my_list[:2]
[0, 10]
my_list[2:]
[20, 30, 40, 50, 60]
my_list[2:-2]
[20, 30, 40]
my_list[:]
[0, 10, 20, 30, 40, 50, 60]
my_list[2:6:2]
[20, 40]
my_list[4:2:-1]
[40, 30]
my_array = [0, 10, 20, 30, 40, 50, 60]my_array.slice(2, 4);
[ 20, 30 ]
my_array.slice(null, 2);
[ 0, 10 ]
my_array.slice(2);
[ 20, 30, 40, 50, 60 ]
my_array.slice(2, -2);
[ 20, 30, 40 ]
my_array.slice();
[ 0, 10, 20, 30, 40, 50, 60 ]

Срезов с шагом (третий аргумент в Python) в JavaScript по умолчанию нет.

my_list = [0, 10, 20, 30, 40] my_list[2:4] = [200, 300, 400] my_list
[0, 10, 200, 300, 400, 40]
my_list[1:2] = [] my_list
[0, 200, 300, 400, 40]
my_list[3:3] = [999] my_list
[0, 200, 300, 999, 400, 40]
var my_array = [0, 10, 20, 30, 40]; var deleted; deleted = my_array.splice(2, 2, 200, 300, 400);my_array;
[ 0, 10, 200, 300, 400, 40 ]
deleted;
[ 20, 30 ]
my_array.splice(1, 1);my_array;
[ 0, 200, 300, 400, 40 ]
my_array.splice(3, 0, 999);my_array;
[ 0, 200, 300, 999, 400, 40 ]

Метод splice(start, deleteCount, item1, item2, . ) редактирует массив in place: удаляет deleteCount элементов, начиная с start , затем добавляет элементы item1 , item2 , и т.д.

© Ilya V. Schurov and contributors, 2017
Licenses: CC BY (text), MIT (code).
contribute on github

Язык

  • Английский (English)
  • Русский (Russian)

Темы

  • Списки / массивы
  • Цикл for
  • Словари / объекты
  • Области видимости
  • Типы и сравнение
  • Функции

Массивы и списки в Python

Рассмотрим в уроке массивы и их виды, списки, нумерацию списков и основные методы при работе с ними.

Массивы

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

Массивы символов

Перед началом работы с массивами подключаем соответствующий модуль. Для этого введем команду:

from array import *

Создадим массив для данных типа int:

>>> a = array('i', [2, 5, 4, 0, 8]) >>> type(a) >>> a array('i', [2, 5, 4, 0, 8])

Теперь обратимся к каждому из элементов данного массива. Попробуем изменить их и дополнить массив:

>>> a[2] 4 >>> a[6] Traceback (most recent call last): File "", line 1, in a[6] IndexError: array index out of range

Как видите, нельзя обратиться к элементу, которого нет.

Любой массив может содержать данные только одного типа, то есть нельзя использовать int и float в одном массиве. Это является недостатком при работе, для устранения которого были введены списки (list).

Список в Python

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

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

Списки в Python

Рассмотрим на примере:

>>> a = [] >>> type(a)

Теперь добавим элементы и проверим доступ к ним:

>>> a = [1,0.34,"Hello"] >>> a [1, 0.34, 'Hello'] >>> a[2] 'Hello' >>> a[0] 1 >>> a[1] 0.34

Нумерация списка в Python

Прямая и обратная нумерация

По умолчанию нумерация начинается с 0.

a = [1, 'abc', h, 0,256] 0 1 2 3 

При обратной нумерации элементы считаются с конца и начинаются с -1:

a = [1, 'abc', h, 0,256] -4 -3 -2 -1

С помощью этих индексов можем обратиться к каждому элементу списка:

a[0] >>> 1 a[-2] >>> h

Срез

Срез — это некий диапазон символов, к которому мы обращаемся. При срезе вторым числом мы указываем номер символа, который не входит в диапазон:

a[0:2] #[1, 'abc'] a[-4:-2] #[1, 'abc']

Мы можем обратиться и к символам с использованием разных нумераций одновременно:

a[0:-2] #[1, 'abc']

Если мы не укажем одну из границ среза, то программа принимает за границу первый или последний символ:

a[:2] #[1, 'abc'] a[2:] #[h, 0,256]

Методы работы со списками

Рассмотрим основные методы работы со списками на примерах.

list.append(x)

Добавляет в конце списка новый элемент x:

>>> a = [0,0.1,"один"] >>> a.append(321) >>> a [0, 0.1, 'один', 321]
list.insert(i,x)

Вставка элемента x на место i (нумерация начинается с нуля):

>>> a = [0,0.1,"один"] >>> a.insert(1,321) >>> a [0, 321, 0.1, 'один']
list.extend(L)

Добавляет в конец списка список L:

>>> a = [0,0.1,"один"] >>> b = ["два",3,4.1] >>> a.extend(b) >>> a [0, 0.1, 'один', 'два', 3, 4.1]
list.remove(x)

Удаляет первый встреченный элемент со значением x:

>>> a = [0,0.1,"один",0] >>> a.remove(0) >>> a [0.1, 'один', 0]
list.pop(i)

Возвращает элемент, размещенный по индексу i, удаляет его из списка:

>>> a = [0,0.1,"один",0] >>> a.pop(3) 0 >>> a [0, 0.1, 'один']
list.count(x)

Возвращает количество элементов, равных x:

>>> a = [0,0.1,"один",0] >>> a.count(0) 2
list.clear()
>>> a = [0,0.1,"один",0] >>> a [0, 0.1, 'один', 0] >>> a.clear() >>> a []

Курсы Робикс, в которых изучается этот материал.

  1. Программирование на Python в Minecraft
  2. Duckietown робот с системой Автопилота

В чем разница между массивами, списками и словарями в Python?

В чем разница между массивами, списками и словарями в Python?

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

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

Единственное сравнение, которое мы не будем проводить, — это синтаксис, поскольку известно, что для работы им потребуется другой синтаксис. Итак, без дальнейших промедлений, давайте погрузимся прямо в.

Массивы

Массив — это особый тип переменной, которая может содержать более одного значения одновременно. Для этого он создает форму списка, где вы можете перебирать все различные значения.

Для сортировки по этому типу существуют индексы. Индекс просто присваивает число (начиная с нуля), которое придает массиву своего рода предопределенный порядок, основанный на добавлении значений. Вы можете отсортировать его позже с помощью метода sort. Вы также можете добавить и удалить позже.

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

Списки

Список — это тип данных, который позволяет хранить несколько значений или элементов в одной переменной. Это автоматически тип данных в Python, поэтому вы можете начать использовать его, когда захотите.

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

Поскольку каждому значению присваивается неявный индекс, в списке могут быть повторяющиеся значения. Вы также можете отсортировать список с помощью метода сортировки.

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

Словари

Словарь — это еще один тип данных, который позволяет хранить несколько значений в одном типе данных. Как и в двух других обсуждаемых типах, словари имеют предопределенный порядок элементов, основанный на том, когда они добавляются к переменной.

Однако одно большое различие между типом данных словаря заключается в том, что он не использует индекс. Вместо этого значения хранятся в паре ключ-значение. Если подумать о ключ:значение , это больше похоже на то, что будет делать запись в базе данных. Каждому значению предшествует тип значения, которым оно является. Этот тип данных также гарантирует, что не может быть повторяющихся значений.

Массивы против. Списки против. Словари

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

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

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

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

И массивы, и списки используют индексы, чтобы различать значения, хранящиеся в определенном порядке. Но вместо этого словарь использует key:value . Это означает, что массивы и списки могут допускать дублирование значений, чего нет в словарях. Эти индексы также используются в качестве их порядка, поэтому вы можете изменить порядок с помощью «обратного» метода как в массивах, так и в списках.

У словаря нет обратного метода, так как у него ключи со значениями вместо индекса. Еще одно замечание: словарь не гарантирует, что порядок вводимой информации всегда будет оставаться неизменным. В отличие от массивов и списков, которые сохраняют свой порядок, поскольку нумеруются по индексам.

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

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

Последний элемент, который мы рассмотрим, — задействованная память. Таким образом, списки, как правило, потребляют больше памяти, поскольку они сделаны так, чтобы их было проще добавлять и удалять из списка. Из-за этого они также предпочитают более короткие последовательности данных. Для массивов они предназначены для хранения более длинных последовательностей данных, поэтому они, как правило, более компактны.

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

Вывод

Это был только краткий обзор списков, массивов и словарей. Хотя все они содержат несколько значений в одной переменной, все они также разные. Все, что мы обсуждали, касается только Pythonic-версий этих типов данных.

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

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

Я надеюсь, что вы нашли это напоминание интересным, и, пожалуйста, не стесняйтесь комментировать любые различия, которые я упустил. До следующего раза, ура!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *