Введение во встроенные коллекции в Python

Должен быть один - а желательно только один - очевидный способ сделать это. - Дзен Питона

Почему выбор правильной структуры данных «extremely’ важен?»

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

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

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

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

1. кортеж

2. ул.

3. диапазон

4. список

5. dict

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')

Строка - ›str

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

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

Concat строки

  • + можно использовать оператор
  • Строки неизменяемы, поэтому оператор + = создает новый объект.
>>> '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]

Словарь - ›dict

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

  • Ключи должны быть уникальными в словаре
  • заключен в {}
  • пары "ключ-значение", разделенные запятыми, соединенные двоеточием
>>> 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, issueperset.

Заключение

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

Прочие чтения

📝 Прочтите этот рассказ позже в Журнале.

👩‍💻 Просыпайтесь каждое воскресное утро и слушайте самые интересные истории недели в области технологий, которые ждут вас в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .