Искать
Вы превысили запрос на
0 знаков

32. Итоги раздела «Структуры данных в Python»

Не пройден
0
0

Уроки раздела «Структуры данных в Python»

- Введение в раздел «Структуры данных в Python»

Списки:

- Списки в Python

- Изменение списка на месте (срезы) в Python

- Дополнительно про списки в Python

- Конкатенация и сортировка списков в Python

Словари:

- Словари в Python

- Словари и списки (дополнительно)

- Перебор элементов словаря в Python

- Внутреннее устройство и сортировка словаря в Python

- Методы словарей и функция len() в Python

Множества:

- Множества в Python

- Методы и особенности множеств в Python

- Отношения между множествами и операции над ними

Кортежи:

- Кортежи в Python

- Более подробно о кортежах в Python

Кратко

- Раздел "Структуры данных в Python" охватывает списки, словари, множества и кортежи.

- Списки: основные методы работы со списками, универсальные функции sum(), min() и max(), срезы (slice) для изменения списков на месте.

- Словари: метод setdefault(), перебор элементов словаря с помощью цикла for, методы items(), keys() и values(), внутреннее устройство словаря и его сортировка.

- Множества: создание множеств, методы add(), remove(), discard(), pop() и clear(), проверка наличия элемента во множестве.

- Кортежи: определение кортежей, методы распаковки, неизменяемость кортежей.

- В разделе также рассмотрены особенности хранения элементов словаря в памяти и сортировка словаря по ключам и значениям.

- Раздел "Структуры данных в Python" является объемным и затрагивает важные базовые темы, которые помогут разобраться с более сложным материалом.

В этом разделе подробно рассмотрели четыре структуры данных: списки, словари, множества и кортежи.

Краткий пересказ раздела «Структуры данных в Python»

Списки

Первый урок начали с нескольких примеров списков:

Пример (python)
list1 = [2, 4, 8, 16]  
list2 = ["Иван", "Иванов", 20]  
list3 = [list1, list2] 

Пример (python)
list3 = [[2, 4, 8, 16], ["Иван", "Петр"]] 

И написали программу, которая выводит гласные, встречающиеся в строке:

Пример (python)
letters = ["а", "е", "и", "о", "у", "э", "ю", "я"]
word = "список – это массив"

for item in word:
    if item in letters:
        print(item)  

Далее пробежались по основным методам, работающим со списками: append, pop, extend, remove и insert. Позднее изучили и другие: index, clear, reverse, count. Познакомились с универсальными функциями sum(), min() и max(). Вспомнили про модуль random и перемешали элементы списка с помощью метода snuffle():

Пример (python)
import random
a = [1, "Hello", [3, 6, 7], 4, 5]
random.shuffle(a) # ~=> [5, 'Hello', 4, 1, [3, 6, 7]] 

Изучая списки, мы затронули срезы (slice), которые помогают изменять их на месте:

Пример (python)
a = [1, 2, 3, 4, 5]
a[1:3] # => [2, 3]
a[1:] # => [2, 3, 4, 5]
a[1:] = [6, 7] # => [1, 6, 7] 

В конце выяснили как правильно «соединять» (конкатенировать) списки и с какими неожиданными эффектами можно столкнуться при их копировании. В этом же уроке познакомились с функцией sorted() и методом sort(), с помощью которых можно сортировать списки.

Словари

Словари в Python напоминают ассоциативные массивы. В них так же уникальному значению ключа соответствует произвольное значение. Словарь в Python объявляется в фигурных скобках:

Пример (python)
person = {"firstname": "Ivan",
          "lastname": "Ivanov",
          "age": 30}

print(person["firstname"])  

В этом же уроке мы познакомились с методом setdefault(), который упрощает наш код.

Пример (python)
for letter in word:
    letters.setdefault(letter, 0)
    letters[letter] += 1 

Затем мы разобрались как можно перебирать элементы словаря. Это делается не так просто как со списками. Использовали всё тот же цикл for:

Пример (python)
numbers = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four'}

for item in numbers:
    print(item, numbers[item]) 

Далее рассмотрели методы items()keys() и values(). Метод items() возвращает список кортежей из двух элементов. Методы keys() и values() возвращают список ключей и список значений, соответственно:

Пример (python)
print(numbers.items())  # => dict_items([(1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four')])
print(numbers.keys())   # => dict_keys([1, 2, 3, 4])
print(numbers.values()) # => dict_values(['One', 'Two', 'Three', 'Four']) 

Вооружившись новыми методами, переписали пример выше:

Пример (python)
numbers = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four'}

for k, v in numbers.items():
    print(k, v) 

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

Далее познакомились со следующими методами словарей: pop(), get(), popitem(), clear(), copy(), fromkeys() и update(). Изучили универсальную функцию len() и ключевое слово del.

Множества

В Python множество – структура данных, которая очень похожа на множества из школьной математики. Главная особенность множества – автоматическое удаление одинаковых значений. Как в строке оставить только уникальные символы? Очень просто:

Пример (python)
letters = set("ааоеее")
print(letters) # => {'а', 'о', 'е'} 

В следующем уроке мы выяснили как создаются множества и познакомились с различными методами: add(), remove(), discard(), pop() и clear(). Научились проверять наличие элемента во множестве:

Пример (python)
s = {1, 1, 2, 2, 3}
print(1 in s) # => True 

Кстати, проверка выполняется очень быстро, так как множества основаны на хэш-таблицах.

Здесь изображение или скриншот.
Для доступа необходимо авторизоваться на сайте Codebra.

Далее мы говорили об отношениях между множествами и методах issubset(), issuperset(), update(), intersection(), intersection_update(), difference(), difference_update(), symmetric_difference(), symmetric_difference_update(). Урок очень подробный и наглядный, поэтому рекомендую к нему вернуться. Там же немного поговорили о структуре frozenset.

Кортежи

После изучения списков, множеств и словарей, о кортежах мало что можно сказать. Кортежи – неизменяемая структура. Начали мы с определения кортежей в коде. Их выдают круглые скобки. Нужно быть только внимательными с кортежами из одного элемента: интерпретатор может принять их за другой объект:

Пример (python)
c = ("Строка")
print(type(c)) # => <class 'str'>

c = ("Строка", )
print(type(c)) # => <class 'tuple'> 

Если забыли про функцию type(), вернитесь к уроку про преобразование и проверку типов в Python.

В следующем уроке поговорили подробнее о кортежах и их вездесущности. Так же затронули оператор распаковки (*).

Еще говорили о неизменяемости кортежей. В этой фразе тоже есть нюанс, например:

Пример (python)
t = (1, 2, [3, 4], 5)
t[2][1] = 6
print(t) # => (1, 2, [3, 6], 5) 

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

Новая информация из раздела «Структуры данных в Python»

Списки

Пустой список в Python создается достаточно просто: [] или list():

Пример (python)
list1 = []
list2 = list()   

Списки имеют следующие основные методы:

  • append() - добавление элемента в конец списка.
  • remove() - удаление элемента по значению.
  • pop() - удаляет элемент по индексу и возвращает его.
  • extend() - добавление списка в конец списка.
  • insert() - вставка элементов в определенную позицию в списке.
  • index() - определение индекса элемента по значению.
  • clear() - полностью очистить список.
  • reverse() - изменить порядок элементов на обратный.
  • count() - посчитать сколько раз встречается элемент в списке.

На примере работа методов списков будет понятнее:

Пример (python)
list1 = []
list1.append(1)
list1.append("a")
list1 # => [1, 'a']

list1.remove(1)
list1 # => ['a']

list1.extend([1, 2, 3])
list1 # => ['a', 1, 2, 3]

list1.insert(2, 'a'
list1 # => ['a', 1, 'a', 2, 3]

list1.index(2) # => 3

list1.count('a') # => 2

list1.reverse() 
list1 # => [3, 2, 'a', 1, 'a']

list1.clear()
list1 # => [] 

Теперь вспомним как изменять списки на месте (то есть использовать срезы). Напомню, списки являются изменяемой структурой и поэтому они поддерживают операции, которые изменяют объект списка на месте (Changing Lists In-Place). Возьмем для примера список и сделаем пару срезов:

Пример (python)
a = [1, 2, 3, 4, 5]
a[1:3] # => [2, 3]
a[1:] # => [2, 3, 4, 5]
a[1:] = [6, 7] # => [1, 6, 7] 

Список сортировать достаточно просто. Чтобы отсортировать сам список, можно использовать метод sort():

Пример (python)
a = [5, 12, 3, 6, 1, 2, 7]
a.sort()
a # => [1, 2, 3, 5, 6, 7, 12]  

Для сортировки списка без внесения изменений в оригинальный, используем функцию sorted():

Пример (python)
a = ['CA', 'ba', 'Ab']
sorted(a) # =>  ['Ab', 'CA', 'ba'] 

Словари

Пустой словарь можно создать следующим образом:

Пример (python)
a = {}
a = dict() 

Структура словаря:

Пример (python)
СЛОВАРЬ = {
	КЛЮЧ_1: ЗНАЧЕНИЕ_1,
	КЛЮЧ_2: ЗНАЧЕНИЕ_2, 
	...
}

print(СЛОВАРЬ[КЛЮЧ_1]) # => ЗНАЧЕНИЕ_1 

Важно помнить

Ключом в словаре может быть любой неизменяемый объект.

Словарь перебирать немного сложнее, чем список. Следующие методы упрощают работу со словарями:

  • items() - возвращает список кортежей из двух элементов. Первый элемент является ключом, второй – значением. Программистам на С++ это знакомо как пара (в STL шаблон pair).
  • keys() - возвращает список ключей словаря. 
  • values() - возвращает список значений словаря.
  • pop() - удаляет ключ и возвращает его значение.
  • get() - возвращает значение элемента по указанному ключу или None, если такого ключа не существует.
  • popitem() - удаляет последний элемент в словаре и возвращает кортеж из двух элементов: ключа и значения.
  • clear() - полностью очищает словарь.
  • copy() - копирование словаря.
  • fromkeys() - принимает два параметра: итерируемый объект в качестве ключей (например, кортеж) и необязательный параметр, который является значением по умолчанию для каждого ключа.
  • setdefault() - возвращает элемент словаря по указанному ключу. Если такого ключа нет, то в словарь запишется указанный ключ и значение по умолчанию, и вернется это значение.
  • update() - добавление новых элементов и перезапись уже имеющихся ключей.

Далее пару примеров, чтобы вспомнить методы словарей в Python:

Пример (python)
dict1 = {}
list1 = {3, 4, 5, 6}

dict1 = dict.fromkeys(list1, None)
print(dict1) # => {3: None, 4: None, 5: None, 6: None}

print(dict1.pop(5)) # => None
print(dict1) # => {3: None, 4: None, 6: None}

dict1.update({6: 'Six'})
print(dict1) # => {3: None, 4: None, 6: 'Six'} 

Помните, мы говорили о возможности в Python инициализировать сразу несколько переменных? Воспользуемся этими знаниями и объединим их с методом items(), который возвращает кортеж из двух элементов:

Пример (python)
numbers = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four'}

for k, v in numbers.items():
    print(k, v) 

Особенности хранения элементов словаря в памяти

- С версии Python 3.6. порядок элементов стал неизменяемым.

- Хранение словаря реализовано с помощью двух массивов, благодаря чему стало уходить меньше памяти на хранение.

Сортировать словарь по ключам можно с помощью метода items() и функции sorted(), которая возвращает отсортированный список из кортежей. Его нужно собрать в словарь. Да, я не упоминал функцию dict() в уроке про преобразование типов, настало время это исправить:

Пример (python)
numbers = {1: 'One', 3: 'Three', 2: 'Two'}
numbers = sorted(numbers.items())
numbers # => [(1, 'One'), (2, 'Two'), (3, 'Three')]
dict(numbers) # => {1: 'One', 2: 'Two', 3: 'Three'} 

Другой способ сортировать словарь по ключам:

Пример (python)
numbers = {1: 'One', 2: 'Two', 4: 'Four', 3: 'Three'}
list_keys = list(numbers.keys())
list_keys.sort()

for i in list_keys:
    print(i, ':', numbers[i]) 

Сортировать словарь по значению сложнее. В уроке мы подробно рассмотрели этот процесс, а сейчас лишь освежим в памяти:

Пример (python)
import operator  
numbers = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four'}  
  
numbers = sorted(numbers.items(), key=operator.itemgetter(1))  
  
dict(numbers) # => {4: 'Four', 1: 'One', 3: 'Three', 2: 'Two'} 

Для удаления из словаря элемента или самого словаря, используйте ключевое слово del:

Пример (python)
del numbers['One'] # удаление элемента с ключом One
del numbers # удаление словаря numbers 

Множества

Пустое множество можно создать с помощью функции set() и, казалось бы, фигурных скобок {}, но во втором варианте есть нюанс.

Пример (python)
a = set()
s = {}

print(type(s)) # => <class 'dict'> 

Да, пустые словари и множества инициализируются одинаково, поэтому создание последних необходимо указывать явно при помощи функции set().

Для множеств в Python доступны следующие методы:

  • add() - добавление элемента во множество.
  • remove() - удаление элемента из множества с вызовом исключения KeyError, в случае отсутствия удаляемого элемента.
  • discard() - удаление элемента из множества без вызова исключения.
  • pop() - возвращает «случайный» элемент и удаляет его из множества.
  • clear() - полностью очищает множество.
  • intersection() - определение пересечения множеств.
  • intersection_update() - определение пересечения множеств и изменение текущего.
  • isdisjoint() - возвращает истину, если оба множества не имеют общих элементов.
  • issubset() - является ли множество (для которого вызывается метод) подмножеством.
  • issuperset() - является ли множество (для которого вызывается метод) надмножеством.
  • union() - объединение двух множеств.
  • difference() - определение элементов, которые есть в первом множестве, но нет во втором.
  • differenсe_update() - определение элементов, которые есть в первом множестве, но нет во втором и изменение текущего множества.
  • symmetric_difference() - определение элементов одного множества, которых нет во втором и элементов второго множества, которых нет в первом.
  • symmetric_difference_update() - определение элементов одного множества, которых нет во втором и элементов второго множества, которых нет в первом. И изменение текущего множества.

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

Кортежи

Пустой кортеж можно создать так же двумя способами: функция tuple() и пустые круглые скобки (). Честно говоря, я не знаю для чего это может вам пригодиться.

Пример (python)
t = tuple()
t = () 

Чтобы создать кортеж с одним элементом, не забываем ставить запятую:

Пример (python)
c = ("Строка", )
print(type(c)) # => <class 'tuple'> 

Кортежи поддерживают такие же методы как и списки, за исключением тех, которые могут их поменять. Например, методы sort() и append() кортежи не поддерживают.

Общее

Мы упоминали функцию len(), которая возвращает количество элементов в итерируемом объекте (строка, список, словарь и т.д.):

Пример (python)
# словарь  
d = {4: 5, 1: 1, 3: 12, 2: 3}  
len(d) # => 4  
  
# строка  
s = "Hello"  
len(s) # => 5 

Заключение

Раздел «Структуры данных в Python» получился объемным. Мы рассмотрели всего четыре структуры данных, но в тоже время затронули и другие важные базовые темы, понимание которых поможет с наименьшими потерями душевного равновесия разобраться с более сложным материалом в дальнейшем. Не буду много писать в заключении, и так много текста получилось. Переходите к следующему разделу, в котором мы вернемся к циклам и изучим новую тему: обработка исключений.

Тест

Две секундочки...

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Типы данных в PythonЗнакомство с Python
Поиск хостов с помощью NmapРазведка и сканирование
Первое знакомство с PythonЗнакомство с Python
Внутреннее устройство и сортировка словаря в PythonЗнакомство с Python
Методы и особенности множеств в PythonЗнакомство с Python
Пользовательские функции в PHPКурс по PHP
Отношения между множествами и операции над нимиЗнакомство с Python
Поиск сетевых уязвимостей с помощью Metasploit Framework (MSF)Разведка и сканирование
Введение в раздел «Структуры данных в Python»Знакомство с Python
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

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

Удачи в обучении!

Закрыть окно