Источник: средний пользователь

Структуры данных в Python

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

1. кортеж

2. ул

3. диапазон

4. список

5. словарь

6. установить

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

Кортеж -> кортеж

  • гетерогенная неизменяемая последовательность
  • После создания не может быть обновлен
  • в круглых скобках, а не в квадратных скобках
>>> a = (5, 6.54, "United States")
>>> type(a)
<class 'tuple'>

Доступ к ним можно получить с помощью индексов на основе 0

>>> a[1]
6.54

Вернуть длину с помощью len()

>>> len(a)
3

Может содержать любой объект и, следовательно, может быть вложенным

>>> b = (1, 1.25, ("US", "UK"))>>> b[2][0]
'US'

Для кортежа из одного элемента необходимо использовать запятую в конце

>>> b = (a, )>>> type(b)
<class 'tuple'>

Скобки в большинстве случаев можно опустить

>>> b = 1, 1.25, 'US'>>> type(b)
<class 'tuple'>

Кортеж можно распаковать в переменные

>>> a, b = (5, 6)>>> a
5>>> b
6# Swapping 2 elements using unpacking>>> a = 5>>> b = 10>>> a, b = b, a

Конструктор кортежа можно использовать для создания кортежа из других итераций.

# Creating a tuple from a list>>> a = [1, 2, 3, 4, 5]>>> type(a)
<class 'list'>>>> b = tuple(a)>>> type(b)
<class 'tuple'>>>> b
(1, 2, 3, 4, 5)# Creating a tuple from a string>>> tuple('strings')
('s', 't', 'r', 'i', 'n', 'g', 's')

Строка -> ул.

однородная неизменяемая последовательность символов Unicode

  • len() дает нам количество символов
>>> a = 'A quick brown fox jumps over the lazy dog'>>> len(a)
41

Объединить строки

  • + можно использовать оператор
  • Строки неизменяемы, поэтому оператор += создает новый объект
>>> 'Quick' + 'Brown' + 'Fox'
'QuickBrownFox'

Использование join() для конкатенации

>>> ' '.join(['Quick', 'Brown', 'Fox'])
'Quick Brown Fox'

Разделить строку

>>> 'Quick Brown Fox'.split(' ')
['Quick', 'Brown', 'Fox']

Использование partition() — разбивает строку на префикс, разделитель, суффикс

>>> 'Singapore:New York'.partition(':')
('Singapore', ':', 'New York')# using tuple unpacking>>> source, separator, destination = 'Singapore:New
York'.partition(':')>>> source
'Singapore'>>> destination
'New York'# using _ for dummy variable
>>> source, _, destination = 'Singapore:New York'.partition(':')>>> source
'Singapore'>>> destination
'New York'

Форматирование строки с помощью format()

>>> 'Its {0} {1} birthday on {1} {2}'.format("Nathan's",'5th', 'November')
"Its Nathan's 5th birthday on 5th November"

Диапазон -> диапазон

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

# stop as an argument>>> list(range(5))
[0, 1, 2, 3, 4]# start and stop>>> list(range(2, 5))
[2, 3, 4]# start, stop and step value>>> list(range(2, 10, 2))
[2, 4, 6, 8]

Список -> список

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

>>> l = ['A', 'Quick', 'Brown', 'Fox']

Операции

Индекс с конца

>>> l = ['A', 'Quick', 'Brown', 'Fox']>>> l[1]
'Quick'# last element>>> l[-1]
'Fox'# second last element>>> l[-2]
'Brown'

Нарезка списка

>>> l = ['A', 'Quick', 'Brown', 'Fox']>>> slice = l[:3]>>> slice
['A', 'Quick', 'Brown']>>> slice = l[1:3]>>> slice
['Quick', 'Brown']

Содержимое и равенство объектов

>>> l = ['A', 'Quick', 'Brown', 'Fox']# creates a new list with contents of l>>> full_slice = l[:]>>> full_slice
['A', 'Quick', 'Brown', 'Fox']# Checking if contents of 'l' and 'full_slice' are same
>>> l == full_slice
True# Checking if 'l' and 'full_slice' refer to same object in memory>>> l is full_slice
False

Повторяющийся список с использованием оператора *

>>> a = [1, 0]>>> a * 4
[1, 0, 1, 0, 1, 0, 1, 0]

Найти индекс элемента

>>> l = ['A', 'Quick', 'Brown', 'Fox']>>> l.index('Brown')
2# if item is not present in the list
>>> l.index('jumps')Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'jumps' is not in list

Удалить элемент из списка

# remove by index using del keyword>>> l = ['A', 'Quick', 'Brown', 'Fox']>>> del l[1]>>> l
['A', 'Brown', 'Fox']# remove by item>>> l = ['A', 'Quick', 'Brown', 'Fox']>>> l.remove('Quick')>>> l
['A', 'Brown', 'Fox']

Вставить элемент в список

>>> l = ['A', 'Quick', 'Brown', 'Fox']# insert at an index>>> l.insert(1, 'Healthy')>>> l
['A', 'Healthy', 'Quick', 'Brown', 'Fox']

Расширение списка

>>> a = [1, 2, 3]>>> a = a + [4, 5]>>> a
[1, 2, 3, 4, 5]# Inplace using +=>>> a = [1, 2, 3]>>> a += [4, 5]>>> a
[1, 2, 3, 4, 5]# Inplace using extend>>> a.extend([4, 5])>>> a
[1, 2, 3, 4, 5]

Реверс на месте и сортировка по списку

# inplace reverse
>>> a = [1, 2, 3]>>> a.reverse()>>> a
[3, 2, 1]# inplace sort>>> a.sort()>>> a
[1, 2, 3]

Сортировка списка на месте с явной ключевой функцией

# sorting with a key - accepts a function for producing a sort key>>> l = 'A quick brown box jumps over the lazy dog'.split()>>> l
['A', 'quick', 'brown', 'box', 'jumps', 'over', 'the', 'lazy', 'dog']# sorts according the length of the words>>> l.sort(key=len)>>> l
['A', 'box', 'the', 'dog', 'over', 'lazy', 'quick', 'brown', 'jumps']

Использование sorted() для возврата отсортированного списка, сохраняя исходный неизмененным

>>> a = [1, 4,2, 7]>>> b = sorted(a)>>> a
[1, 4, 2, 7]>>> b
[1, 2, 4, 7]

Словарь -› дикт

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

  • Ключи должны быть уникальными в словаре
  • заключен в {}
  • пары ключ-значение, разделенные запятыми, соединенные двоеточием
>>> d = {'Google': 'www.google.com', 'Facebook': 'www.facebook.com'}>>> d
{'Google': 'www.google.com', 'Facebook': 'www.facebook.com'}# access with a key>>> d['Google']
'www.google.com'

Итерация словаря

>>> for k, v in d.items():...     print(f'{k} -> {v}')...Google -> www.google.com
Facebook -> www.facebook.com

Сет -> сет

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

  • окружен {}
  • используйте set() для создания пустого набора
  • обычное использование - эффективное удаление дубликатов

Создать набор

>>> s = {1, 2, 3, 5}>>> s
{1, 2, 3, 5}

Создать набор из другой коллекции

>>> l = [1, 2, 2, 3, 4, 4, 5]# create a set from a list>>> s = set(l)>>> s
{1, 2, 3, 4, 5}

Добавить элемент в набор

>>> s = {1, 2, 3, 4}>>> s
{1, 2, 3, 4}>>> s.add(6)>>> s
{1, 2, 3, 4, 6}# adding an already existing element doesn't have any effect, also it doesn't give # error>>> s.add(6)>>> s
{1, 2, 3, 4, 6}# adding multiple elements in one go with update>>> s.update([7, 8, 9, 10])>>> s
{1, 2, 3, 4, 6, 7, 8, 9, 10}

Удалить элемент из набора

# delete with remove() - gives error if element is not present>>> s
{1, 2, 3, 4, 6, 7, 8, 9, 10}>>> s.remove(1)>>> s
{2, 3, 4, 6, 7, 8, 9, 10}>>> s.remove(1)Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1# with discard() - no error even if element is not present>>> s
{2, 3, 4, 6, 7, 8, 9, 10}>>> s.discard(1)

Примечание. Мы можем применять такие операции, как пересечение, объединение, issubset, issuperset к заданному объекту.

Вывод

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

Другие чтения