1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Если при изучении множеств остановиться на создании и модифицировании, может показаться, что множества не сильно-то и отличаются от списков. Кажется, что они просто позволяют быстрее проверить вхождение элемента, но при этом не поддерживают механизм срезов.</p>
1
<p>Если при изучении множеств остановиться на создании и модифицировании, может показаться, что множества не сильно-то и отличаются от списков. Кажется, что они просто позволяют быстрее проверить вхождение элемента, но при этом не поддерживают механизм срезов.</p>
2
<p>На самом деле, есть более важные аспекты, которые мы и изучим в этом уроке.</p>
2
<p>На самом деле, есть более важные аспекты, которые мы и изучим в этом уроке.</p>
3
<h2>Проверка на равенство</h2>
3
<h2>Проверка на равенство</h2>
4
<p>Сопоставление множеств - это довольно мощный инструмент. Давайте проверим два множества на равенство:</p>
4
<p>Сопоставление множеств - это довольно мощный инструмент. Давайте проверим два множества на равенство:</p>
5
<p>Можно подумать, что два множества равны, если каждый отдельный элемент одного множества содержится и во втором. Эта догадка близка к истине, но вспомним, что коллекции в Python хранят только ссылки на объекты. Множества равны, если ссылаются на одни и те же объекты. Одинаковые ссылки равны, но при этом могут быть равны и разные объекты.</p>
5
<p>Можно подумать, что два множества равны, если каждый отдельный элемент одного множества содержится и во втором. Эта догадка близка к истине, но вспомним, что коллекции в Python хранят только ссылки на объекты. Множества равны, если ссылаются на одни и те же объекты. Одинаковые ссылки равны, но при этом могут быть равны и разные объекты.</p>
6
-
<p>Дело в том, что в Python есть специальный<strong>протокол проверки на равенство</strong>. Большинство встроенных типов данных поддерживает этот протокол. Мы можем проверять на равенство числа, строки, булевы значения. А еще можем приравнивать кортежи, списки, словари.</p>
6
+
<p>Дело в ��ом, что в Python есть специальный<strong>протокол проверки на равенство</strong>. Большинство встроенных типов данных поддерживает этот протокол. Мы можем проверять на равенство числа, строки, булевы значения. А еще можем приравнивать кортежи, списки, словари.</p>
7
<p>Здесь Python поступает очень разумно. Если вы приравняете две коллекции одного типа, то эти коллекции будут считаться равными, если их элементы попарно равны с точки зрения протокола. Посмотрите:</p>
7
<p>Здесь Python поступает очень разумно. Если вы приравняете две коллекции одного типа, то эти коллекции будут считаться равными, если их элементы попарно равны с точки зрения протокола. Посмотрите:</p>
8
<p>Словари равны, если порядок ключей разный - лишь бы были равны значения по соответствующим ключам и сами наборы ключей были одинаковыми.</p>
8
<p>Словари равны, если порядок ключей разный - лишь бы были равны значения по соответствующим ключам и сами наборы ключей были одинаковыми.</p>
9
<p>Вот и множества равны, если содержат одинаковые наборы равных попарно элементов.</p>
9
<p>Вот и множества равны, если содержат одинаковые наборы равных попарно элементов.</p>
10
<h2>Объединение множеств</h2>
10
<h2>Объединение множеств</h2>
11
<p>По аналогии с множествами в математике, множества в Python поддерживают операцию<strong>объединения</strong>(union). Эта операция не объединяет множества, а возвращает новый объект.</p>
11
<p>По аналогии с множествами в математике, множества в Python поддерживают операцию<strong>объединения</strong>(union). Эта операция не объединяет множества, а возвращает новый объект.</p>
12
<p>Этот объект - это такое множество, которое содержит все элементы, содержащиеся хотя бы в одном из оригинальных множеств. По смыслу объединение похоже на операцию "ИЛИ" из булевой логики: элемент будет присутствовать в объединении, если он присутствует в первом исходном множестве ИЛИ во втором. Так это выглядит на схеме:</p>
12
<p>Этот объект - это такое множество, которое содержит все элементы, содержащиеся хотя бы в одном из оригинальных множеств. По смыслу объединение похоже на операцию "ИЛИ" из булевой логики: элемент будет присутствовать в объединении, если он присутствует в первом исходном множестве ИЛИ во втором. Так это выглядит на схеме:</p>
13
<p>Для объединения множеств в Python используется оператор |:</p>
13
<p>Для объединения множеств в Python используется оператор |:</p>
14
<h2>Пересечение множеств</h2>
14
<h2>Пересечение множеств</h2>
15
<p>Еще есть "операция И" -<strong>пересечение множеств</strong>(intersection). В пересечение входят элементы, присутствующие в первом из оригинальных множеств И во втором:</p>
15
<p>Еще есть "операция И" -<strong>пересечение множеств</strong>(intersection). В пересечение входят элементы, присутствующие в первом из оригинальных множеств И во втором:</p>
16
<p>В Python оператор пересечения - &:</p>
16
<p>В Python оператор пересечения - &:</p>
17
<h2>Разность множеств</h2>
17
<h2>Разность множеств</h2>
18
<p><strong>Разность множеств</strong>(difference) - такое множество, элементы которого содержатся в первом оригинальном множестве, но не содержатся во втором. Разность представлена оператором -, потому что по смыслу оператор похож на вычитание из арифметики:</p>
18
<p><strong>Разность множеств</strong>(difference) - такое множество, элементы которого содержатся в первом оригинальном множестве, но не содержатся во втором. Разность представлена оператором -, потому что по смыслу оператор похож на вычитание из арифметики:</p>
19
<p>Так разность можно обозначить на схеме:</p>
19
<p>Так разность можно обозначить на схеме:</p>
20
<h2>Симметрическая разность</h2>
20
<h2>Симметрическая разность</h2>
21
<p><strong>Симметрическая разность</strong>(symmetric difference) - множество, в которое входят элементы, присутствующие ЛИБО в первом, ЛИБО во втором оригинальном множестве:</p>
21
<p><strong>Симметрическая разность</strong>(symmetric difference) - множество, в которое входят элементы, присутствующие ЛИБО в первом, ЛИБО во втором оригинальном множестве:</p>
22
<p>По смыслу операция похожа на<strong>исключающее ИЛИ (xor)</strong>, поэтому и представлена оператором ^:</p>
22
<p>По смыслу операция похожа на<strong>исключающее ИЛИ (xor)</strong>, поэтому и представлена оператором ^:</p>
23
<h2>Подмножества и надмножества</h2>
23
<h2>Подмножества и надмножества</h2>
24
<p>Одно множество является<strong>подмножеством</strong>другого (subset), если все элементы первого входят во второе, но второе может содержать еще и другие элементы. Второе в этом случае является<strong>надмножеством</strong>для первого (superset):</p>
24
<p>Одно множество является<strong>подмножеством</strong>другого (subset), если все элементы первого входят во второе, но второе может содержать еще и другие элементы. Второе в этом случае является<strong>надмножеством</strong>для первого (superset):</p>
25
<p>При этом равные множества являются друг для друга одновременно и подмножествами и надмножествами.</p>
25
<p>При этом равные множества являются друг для друга одновременно и подмножествами и надмножествами.</p>
26
<p>В Python соотношение множеств можно проверить с помощью методов issubset и issuperset:</p>
26
<p>В Python соотношение множеств можно проверить с помощью методов issubset и issuperset:</p>
27
27