Источник: средний пользователь
Структуры данных в 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.