В статье будет описана работа с текстовыми файлами в Python 3. Вы научитесь сохранять строки и другие объекты в файлы а затем считывать их.
Архив метки: Python
Python 3. Множества
В этой статье я разбираю Множества в Python 3. Вы узнаете, какими свойствами обладают множества и как можно с ними работать.
Свойства множеств
Я уже писал про последовательности и множества в Python 3. Множество — это неупорядоченная совокупность объектов, в которой не может быть дубликатов. Множество можно изменять, добавляя и удаляя из него объекты.
Объявить множество можно с помощью фигурных скобок, но в отличии от словарей не нужно указывать ключи. Создание множества и получение некоторых свойств множества показаны ниже:
### Код
my_set = {1, 2, 3, 4, 5} # создание множества
print(type(my_set)) # тип
print(len(my_set)) # длина
print(my_set)
### Исполнение
<class 'set'>
5
{1, 2, 3, 4, 5}
Так как множество не упорядочены, то: обращение по индексу, срезы, конкатенация и повторение — здесь не работают.
Множества часто используются для двух целей:
- для удаления дубликатов;
- для проверки, входит ли элемент в множество (поиск в множестве занимает очень мало времени даже для очень больших множеств).
Работа с множествами
Добавить элемент в множество можно с помощью метода add():
### Код
my_set = {1, 2, 3, 4, 5}
my_set.add(6)
print(my_set)
### Исполнение
{1, 2, 3, 4, 5, 6}
Можно одно множество соединить с другим с помощью метода update():
### Код
my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}
my_set1.update(my_set2)
print(my_set1)
### Исполнение
{1, 2, 3, 4, 5, 6, 7}
Метод update() может принять любой список:
### Код
my_set = {1, 2, 3, 4, 5}
my_set.update([7, 5, 3, 6, 2])
print(my_set)
### Исполнение
{1, 2, 3, 4, 5, 6, 7}
Как можно заметить из результата выполнения кода, повторяющиеся значения, добавляемые в множество, игнорируются.
Удаление элемента из множества можно выполнить с помощью методов remove() и discard(). При этом, если удалять несуществующий элемент:
- с помощью remove() — то приложение выдаст ошибку,
- с помощью discard() — приложение ничего не удалит, но и ошибки не будет.
### Код
my_set = {1, 2, 3, 4, 5}
my_set.remove(1)
my_set.discard(3)
print(my_set)
### Исполнение
{2, 4, 5}
### Код (удаление несуществующего элемента методом remove())
my_set = {1, 2, 3, 4, 5}
my_set.remove(6)
print(my_set)
print("Конец!") # Сюда выполнение кода не дойдёт
### Исполнение
Traceback (most recent call last):
File "test2.py", line 2, in <module>
my_set.remove(6)
KeyError: 6
### Код (удаление несуществующего элемента методом discard())
my_set = {1, 2, 3, 4, 5}
my_set.discard(6)
print(my_set)
print("Конец!") # Сюда выполнение кода дойдёт
### Исполнение
{1, 2, 3, 4, 5}
Конец!
Некоторые специфичные операции над множествами продемонстрированы на следующем рисунке:

Эти же операции в виде кода:
# Множества
my_set1 = {1, 5, 9, 6, 4}
my_set2 = {6, 5, 1, 8, 2}
# Пересечение
print(my_set1 & my_set2) # {1, 5, 6}
# Объединение
print(my_set1 | my_set2) # {1, 2, 4, 5, 6, 8, 9}
# Симметричная разница
print(my_set1 ^ my_set2) # {2, 4, 8, 9}
# Разница
print(my_set1 - my_set2) # {9, 4}
print(my_set2 - my_set1) # {8, 2}
Проверка на то, входит ли элемент в множество, осуществляется с помощью оператора in:
my_set = {15, 85, 12, 55, 95, 87, 33}
print(95 in my_set) # True
print(11 in my_set) # False
Так как множества должны вычислять хеш-код для каждого элемента, в них могут храниться только хешируемые элементы. В языке Python изменяемые элементы (список, словарь) не являются хешируемыми. То есть, такое множество нельзя создать:
my_set = {[1, 2, 3], ["один", "два"]}
А такое можно:
my_set = {(1, 2, 3), ("один", "два")}
Итог
В этой статье я немного рассказал про множества (set) в Python 3. Дополнительно, про некоторые особенности множеств можете почитать в официальной документации.
Python 3. Словари
В этой статье я разбираю Словари в Python 3. Вы узнаете, какими свойствами обладают словари и как можно с ними работать.
Свойства словарей
Я уже писал про последовательности и множества в Python 3. Словарь — наиболее гибкий тип данных в Python. Если списки и кортежи можно рассматривать как упорядоченные коллекции объектов, то словари — неупорядоченные коллекции. То есть элементы словаря не индексируются и обратиться к ним по индексу не получится.
Создавая элемент словаря вам нужно задать ему ключ. Затем к созданному элементу можно обращаться по этому ключу. Создаётся словарь с помощью фигурных скобок:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(my_dict['name'])
### Исполнение
Alex
Чем-то напоминает json.
Основные свойства словарей:
- так как словарь не является последовательностью, то некоторые операции не поддерживаются:
- обращение по индексу и срезы;
- конкатенация и повторение;
- словарь это изменяемый объект, то есть добавлять, изменять и удалять элементы словаря можно;
- ключи не обязаны всегда быть строками, можно использовать и числа.
С помощью функции len(), можем узнать количество элементов в словаре:
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985'}
print(len(my_dict))
### Исполнение
2
Работа со словарями в Python
Вывод значения по его ключу я уже показывал выше, но что будет, если искомого ключа в словаре не окажется:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(my_dict['ip'])
### Исполнение
Traceback (most recent call last):
File "test2.py", line 2, in <module>
print(my_dict['ip'])
~~~~~~~^^^^^^
KeyError: 'ip'
Чтобы избежать ошибку, лучше извлекать данные из словаря с помощью метода get:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(my_dict.get('ip'))
print(my_dict.get('name'))
### Исполнение
None
Alex
Метод get позволяет указать значение по умолчанию, оно будет выводиться вместо None, если ключ отсутствует:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(my_dict.get('ip', 'Нет такого ключа'))
### Исполнение
Нет такого ключа
Можно вывести все ключи с помощью метода keys(), или все значения с помощью метода values(). Или можно вывести кортежи в виде пар «ключ : значение», с помощью метода items():
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(my_dict.keys())
print(my_dict.values())
print(my_dict.items())
### Исполнение
dict_keys(['name', 'date'])
dict_values(['Alex', '12.05.1985'])
dict_items([('name', 'Alex'), ('date', '12.05.1985')])
Преобразуя вывод items() в список, получим список кортежей:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(list(my_dict.items()))
### Исполнение
[('name', 'Alex'), ('date', '12.05.1985')]
В примере выше получился действительно список кортежей, и к его элементам можно обращаться по индексу:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
print(list(my_dict.items())[0])
print(list(my_dict.items())[0][1])
### Исполнение
('name', 'Alex')
Alex
Добавить элемент в словарь можно таким способом:
### Код
my_dict = {'name' : 'Alex', 'date' : '12.05.1985'}
my_dict['position'] = 'IT engineer'
print(my_dict)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
Удалить элемент из словаря можно с помощью метода pop():
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
my_dict.pop('position')
print(my_dict)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985'}
А чтобы не возникла ошибка, если удаляемого ключа нет в словаре, можно методу pop() задать дополнительный параметр:
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
my_dict.pop('ip')
print(my_dict)
### Исполнение
Traceback (most recent call last):
File "test2.py", line 2, in <module>
my_dict.pop('ip')
KeyError: 'ip'
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
my_dict.pop('ip', None)
print(my_dict)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
### Код
# Введённый мною элемент (None), будет выведен в консоль, если мы используем функцию print())
# Вместо None можно было задать любой другой объект, например строку
my_dict = {'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
print(my_dict.pop('ip', None))
### Исполнение
None
Так как словарь это изменяемый объект, нужно быть аккуратным с присвоением двум переменным одного словаря:
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985'}
my_dict2 = my_dict
my_dict2['position'] = 'IT engineer'
print(my_dict)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
Чтобы этого избежать, словарь можно копировать с помощью метода copy():
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985'}
my_dict2 = my_dict.copy()
my_dict2['position'] = 'IT engineer'
print(my_dict)
print(my_dict2)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985'}
{'name': 'Alex', 'date': '12.05.1985', 'position': 'IT engineer'}
А если у нас в словаре содержится ещё один словарь, то простым копированием не отделаться:
### Код
my_dict = {'name': 'Alex', 'date': '12.05.1985', 'network' : {'ip' : '192.168.0.12', 'gateway' : '192.168.0.1'} }
my_dict2 = my_dict.copy()
my_dict2['network']['ip'] = '192.168.0.13'
print(my_dict)
print(my_dict2)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985', 'network': {'ip': '192.168.0.13', 'gateway': '192.168.0.1'}}
{'name': 'Alex', 'date': '12.05.1985', 'network': {'ip': '192.168.0.13', 'gateway': '192.168.0.1'}}
При простом копировании у нас не копируется вложенный словарь, копируется лишь ссылка на него. Поэтому когда мы изменяем вложенный словарь, то изменяем его в обоих словарях.
Чтобы этого избежать, существует глубокое копирование. Это метод deepcopy() модуля copy:
### Код
import copy
my_dict = {'name': 'Alex', 'date': '12.05.1985', 'network' : {'ip' : '192.168.0.12', 'gateway' : '192.168.0.1'} }
my_dict2 = copy.deepcopy(my_dict)
my_dict2['network']['ip'] = '192.168.0.13'
print(my_dict)
print(my_dict2)
### Исполнение
{'name': 'Alex', 'date': '12.05.1985', 'network': {'ip': '192.168.0.12', 'gateway': '192.168.0.1'}}
{'name': 'Alex', 'date': '12.05.1985', 'network': {'ip': '192.168.0.13', 'gateway': '192.168.0.1'}}
Итог
Словари — достаточно интересный тип данных в Python. Словарь может содержать вложенные словари или списки и допускает большую вложенность. Объект типа «Словарь» изменяемый, поэтому этот объект можно изменять — добавляя, изменяя или удаляя элементы. Некоторые особенности словарей можете посмотреть здесь.
Python 3. Кортежи
В этой статье я разбираю Кортежи в Python 3. Вы узнаете, какими свойствами обладают кортежи и как можно с ними работать.
Как выучить Python в 2023 году. Полное руководство
В 2023 году Python продолжает оставаться одним из самых популярных языков программирования и широко используется в различных областях. Интересуетесь ли вы наукой о данных, веб-разработкой, мобильными приложениями, играми или робототехникой, лучшие курсы по Python можут стать отличным способом продвижения по карьерной лестнице.
В этом руководстве будет рассказано о том, как эффективно изучать Python, определяя свою мотивацию, изучая синтаксис Python, создавая проекты, внося вклад в open source и многое другое. К концу у вас будет подробная дорожная карта, как стать опытным программистом на Python в 2023 году. Читать
Как выучить Python в 2023 году. Полное руководство. Часть 2
10. Присоединяйтесь к сообществу учащихся
Это важный аспект процесса обучения. Присоединение к сообществу единомышленников поможет вам оставаться мотивированным и на правильном пути.
Вот некоторые из преимуществ присоединения к сообществу, изучающему Python:
- Доступ к множеству ресурсов
- Возможности для совместной работы
- Задавайте вопросы и получайте поддержку
- Сетевые возможности