Основы структур данных python

Основы структур данных python

Как и в любом языке программирования в Python существует несколько типов структур данных, это:

Списки

Это динамическая структура данных, которая может хранить объекты разнородных типов с произвольным доступом к элементам (на самом деле он последовательный, но мы можем получить доступ к любому элементу по его индексу). Индексация элементов списка начинается с нуля. Из операций над списками, на начальном этапе достаточно знать и уметь добавлять элементы в список и удалять их из него.

Создание объекта списка происходит так:

A=list() # пустой список B=[] #пустой список C=[12,13] # список из элементов [12, 13] 

добавление и удаление элемента в/из списка происходит следующим образом:

A.append(1) # A=[1] B=B+[1] #B=[1] C.insert(1,2)# C=[12, 2, 13] # удаление первого вхождения элемента в список C.remove(13)# C=[12,2] # доступ к элементу списка по индексу print(C[0]) # 12 # срез списка print(C[0:1])# 12 # удаление элемента по его индексу del C[0] #C=[2] 

Надо сказать, что все операции так называемые in place, то есть в результате ничего не возвращается и новый список не создается.

Чтобы добавить несколько элементов в список можно использовать оператор + , как в строке 2 B = B + [ 1 , 2 , 3 , 4 , 5 ] , тогда если изначальный список был B = [ 0 , 5 ] , то посте операции он станет B = [ 0 , 5 , 1 , 2 , 3 , 4 , 5 ] . Важно!! если вы используете B . append ([ 1 , 2 , 3 , 4 , 5 ]) , то получите B = [ 0 , 5 ,[ 1 , 2 , 3 , 4 , 5 ]] , то есть добавите список как объект в список. Чтобы результат был идентичен, вместо append нужно использовать extend: B . extend ([ 1 , 2 , 3 , 4 , 5 ]) .

Также список поддерживает методы очистки clear () и сортировки sort () .

A.append(1) # A=[1] A=A+[1,2,5,6,3] #B=[1,1,2,5,6,3] A.sort() #A=[1,1,2,3,5,6] A.clear() #A=[] 

Срез списка задается в формате A[N:M], при этом элемент с номером N включается в срез, а M — нет.

Читайте также:  Python join list to one string

Для проверки наличия элемента в списке существует оператор in , пример:

A.append(1) # A=[1] A=A+[1,2,5,6,3] #B=[1,1,2,5,6,3] 1 in A # True 10 in A # False 

Пример «список четных чисел»

Создадим список, содержащий все четные числа от нуля до некоторого N

A=[] N=10 for i in range(N): if i%2==0: A.append(i) print(A) >>[0, 2, 4, 6, 8] 

Массивы

Масивы в python подобны спискам, за исключением того, что хранят элементы одного и того же типа (basic type). Тип массив (array) реализован в пакете array, для его использования, сначала нужно его импортировать.

Конструктор массивов имеет формат:

array . array ( typecode ,[ initializer ])

На 64-битной машине размер элементов в байтах будет следующим

Type code C Type Python type Minimum size in bytes
‘b’ signed char int 1
‘B’ unsigned char int 1
‘u’ Py_UNICODE Unicode character 2
‘h’ signed short int 2
‘H’ unsigned short int 2
‘i’ signed int int 4
‘I’ unsigned int int 4
‘l’ signed long int 8
‘L’ unsigned long int 8
‘q’ signed long long int 8
‘Q’ unsigned long long int 8
‘f’ float float 4
‘d’ double float 8
import array a=array.array('i',[1,2,3,4]) # создаем массив двубайтовых целых чисел a[1]=12 print(a) >> array('i',[1,12,3,4]) 

Массивы поддерживают те же операции, что и списки

Кортежи

Кортежем или tuple называется неизменяемый список. Создается он следующим образом:

A=tuple() # пустой кортеж B=()#пустой кортеж C=(12,13) # кортеж из элементов (12, 13) 

И соответственно кортеж не поддерживает операции добавления, сортировки, вставки, удаления, расширения. Среди поддерживаемых операций — конкатенация

A=tuple() # пустой кортеж A=A+(1,) #A=(1,) 

Здесь стоит отметить, что в отличие от списка, где новый элемент просто добавляется в конец, происходит создание нового объекта.

A=list() # пустой список B=A # список B и список A указывают на один и тот же объект B==A # True A=A+[1] B==A # True Ничего не изменилось, ссылка на объект осталась прежней, A и B идентичны A=tuple() # пустой кортеж B=A # кортеж B и кортеж A указывают на один и тот же объект B==A # True A=A+(1,) B==A # False Объект A - новый объект 

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

Для проверки наличия элемента в кортеже все аналогично спискам.

Словари

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

Создать ассоциативный массив просто:

A=dict() # пустой словарь B=<> # то же самое С="A":0.1, "B":0> # словарь с двумя элементами "A"=>0.1, "B"=>0 

Чтобы поместить значение в ассоциативный массив, достаточно присвоить значение выбранному индексу, например B [ 10 ] = ‘Hello’ или B [ «12» ] = 12 .

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

У словаря есть два важных метода: keys() и values() . Первый возвращает список ключей, второй — список значений.

В случае словаря B , при вызове B.keys() мы получим [10, «12»] , а при вызове B.values() — [‘Hello’, 12]

Важно

При добавлении элементов в список, кортеж или словарь имейте ввиду, для atomic (immutable) и basic типов, создается ссылка на новый объект и помещается в словарь, для остальных объектов в словарь помещается ссылка на существующий объект. Если он в дальнейшем изменяется, то изменяется и содержимое словаря, кортежа, списка.

import array A=dict() # созадим словарь B=[] # список val=[1,2,3] arr=array.array('d',[1,2,3]) A['1']=arr A[2]=val B.append(val) B.append(arr) В=(val, arr, ) print(A, '\n', B,'\n',D) >> '1': array('d', [1.0, 2.0, 3.0]), 2: [1, 2, 3]> >> [[1, 2, 3], array('d', [1.0, 2.0, 3.0])] >> ([1, 2, 3], array('d', [1.0, 2.0, 3.0]),) arr[0]=12 val.append('1') print(A, '\n', B,'\n',D) >>'1': array('d', [12.0, 2.0, 3.0]), 2: [1, 2, 3, '1']> >> [[1, 2, 3, '1'], array('d', [12.0, 2.0, 3.0])] >> ([1, 2, 3, '1'], array('d', [12.0, 2.0, 3.0]),) 

Как видите, изменение ссылочного объекта вне словаря/списка/кортежа ведет к изменению его в словаре/списке/кортеже

Множества

Это динамическая структура, содержащая уникальные значения. Множество может содержать лишь hashable объекты. Определяется так:

Поддерживает все операции над множествами: включение, исключение, пересечение, объединение.

# пусть имеем два множества a = 1,2,3> b = 2,3,4> # да-да, перечисление элементов в фигурных скобках означает инициализацию множества a.difference(b) >> 1> b.difference(a) >> 4> a.union(b) >> 1,2,3,4> a.intersection(b) >> 2,3> a.issubset(b), a.issuperset(b) >> False, False a.symmetric_difference(b) >> 1,4> 

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

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

С помощью множества (точнее преобразования списка во множество) можно удалить дубликаты из исходной последовательности:

a = [1,2,3,4,3,2,3,2,3,4] b = set(a) print(b) >> 1,2,3,4> 

Источник

5. Структуры данных

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

Инициализировать список, кортеж и словарь можно несколькими способами. Один из наиболее распространенных — присвоить соответствующие символы переменной. Для списка эти символы — [] , для кортежа — () , а для словаря — <> . Если присвоить эти символы без значений внутри, то будут созданы соответствующие пустые структуры данных.

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

Где используется

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

  • Списки: содержат значения. Ими могут быть числа, строки, имена и так далее:
    • Модели автомобилей;
    • Имена собак;
    • Посещенные страны;
    • Посетители магазина и так далее;
    • Все месяцы года;
    • Дисциплины Олимпийских игр;
    • Штаты США;
      Важно только отметить, что кортежи не являются вообще неизменяемыми, ведь вы всегда можете переписать код, поменяв или удалив определенные значения. Речь идет о том, что значения не могут быть изменены после создания — во время работы программы.
    • Словари — это пары из ключа и значения. Словари также являются изменяемыми. Это удобная структура данных, которая подходит для сохранения значения с определенными дополнительными параметрами, например:
      • Данные клиента включая список его покупок
      • Названия стран + их количество олимпийских медалей
      • Автомобильные бренды и их модели
      • Страны с количеством ДТП с летальным исходом

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

      1. List(), dict() и float() используют круглые скобки, потому что они являются функциями;
      2. Скобки сами по себе представляют кортеж, и их не стоит путать со скобками в функциях, например, list();
      3. При создании пустого списка нужно использовать квадратные, а не круглые скобки: [] .

      Функция №1: list()

      У функции list() очень простой сценарий применения.

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

      Источник

Оцените статью