Введение во встроенные коллекции в 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.
Прочие чтения
- Новые возможности Python 3.8
- Основы Python - классы и объекты
- Основы Python - Обработка исключений
- Контроль версий для науки о данных - отслеживание моделей и наборов данных машинного обучения
- Циклическая скорость обучения - полное руководство по настройке скорости обучения для нейронных сетей
- Руководство идиота по матрице точности, припоминания и заблуждения
- Распознавание изображений против обнаружения объектов - разница
📝 Прочтите этот рассказ позже в Журнале.
👩💻 Просыпайтесь каждое воскресное утро и слушайте самые интересные истории недели в области технологий, которые ждут вас в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .