You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"Множества в Python полностью аналогичны одноименным математическим объектам. Множества -- это неупорядоченный набор уникальных элементов. В Python они представлены типом ```set```. Литералами множеств являются фигурные скобки, в точности как в математической нотации. Однако нельзя создать пустое множество с помощью выражения ```{}```, в этом случае будет создан пустой словарь. Пустое множество можно создать используя вызов функции ```set()```."
"Элементы множества должны быть хешируемыми, это означает, что в множествах можно хранить только неизменяемые типы. При этом само множество является изменяемым типом, а значит нехешируемо. Обратите внимание, что кортежи являются хешируемыми, только в том случае, если все их элементы хешируемы. В примере ниже в запись множества были добавлены элементы ```1``` и ```True```, которые являются эквивалентными. Поэтому при создании множества объект ```True``` был исключен как дубликат."
"Такое поведение делает из множеств отличный инструмент для удаления дубликатов (поиск уникальных элементов) из последовательностей."
87
-
],
88
-
"cell_type": "markdown",
89
-
"metadata": {}
69
+
]
90
70
},
91
71
{
92
72
"cell_type": "code",
93
-
"execution_count": 9,
73
+
"execution_count": 3,
94
74
"metadata": {},
95
75
"outputs": [
96
76
{
97
-
"output_type": "stream",
98
77
"name": "stdout",
78
+
"output_type": "stream",
99
79
"text": [
100
80
"set(a) = {3, 1, 42, 2}\n"
101
81
]
@@ -107,22 +87,22 @@
107
87
]
108
88
},
109
89
{
90
+
"cell_type": "markdown",
91
+
"metadata": {},
110
92
"source": [
111
93
"## Операции со множествами\n",
112
94
"\n",
113
95
"Можно узнать длину множества с помощью стандартной функции ```len```."
114
-
],
115
-
"cell_type": "markdown",
116
-
"metadata": {}
96
+
]
117
97
},
118
98
{
119
99
"cell_type": "code",
120
-
"execution_count": 10,
100
+
"execution_count": 4,
121
101
"metadata": {},
122
102
"outputs": [
123
103
{
124
-
"output_type": "stream",
125
104
"name": "stdout",
105
+
"output_type": "stream",
126
106
"text": [
127
107
"len(a) = 3\n"
128
108
]
@@ -134,32 +114,32 @@
134
114
]
135
115
},
136
116
{
117
+
"cell_type": "markdown",
118
+
"metadata": {},
137
119
"source": [
138
120
"Множества в Python реализованы на основе хэш-таблиц. В связи с этим множества являются неупорядоченными коллекциями. Это приводит к тому, что во множествах нельзя обращаться к элементу по индексу и нельзя брать срез. "
"\u001b[1;31mTypeError\u001b[0m: 'set' object is not subscriptable"
164
144
]
165
145
}
@@ -171,22 +151,25 @@
171
151
]
172
152
},
173
153
{
154
+
"cell_type": "markdown",
155
+
"metadata": {},
174
156
"source": [
175
157
"Однако, множества являются итерируемыми коллекциями. Но не стоит итерироваться по ним из-за отсутствия порядка. "
176
-
],
177
-
"cell_type": "markdown",
178
-
"metadata": {}
158
+
]
179
159
},
180
160
{
181
161
"cell_type": "code",
182
-
"execution_count": 3,
162
+
"execution_count": 6,
183
163
"metadata": {},
184
164
"outputs": [
185
165
{
186
-
"output_type": "stream",
187
166
"name": "stdout",
167
+
"output_type": "stream",
188
168
"text": [
189
-
"0\n42\n3\nabc\n"
169
+
"0\n",
170
+
"42\n",
171
+
"3\n",
172
+
"abc\n"
190
173
]
191
174
}
192
175
],
@@ -198,13 +181,28 @@
198
181
]
199
182
},
200
183
{
184
+
"cell_type": "markdown",
185
+
"metadata": {},
201
186
"source": [
202
187
"Со множествами можно выполнять все операции, предусмотренные теорией множеств, а именно брать пересечение, объединение, разность и др. Эти операции представлены несколькими способами. Можно использовать операторы ```&```, ```|```, ```-``` и другие. В этом случае оба операнда должны иметь тип ```set```. Для всех этих операций есть представление в виде соответствующих методов. Отличие операторов от методов заключается в том, что методы могут принимать не только аргументы, которые должны иметь тип ```set```, но и любой итерируемый объект. Кроме этого методы могут принимать любое количество аргументов. Дополнительно у этих операторов есть аналоги в виде in-line операторов и соответствующие методы для изменения множеств \"на месте\"."
203
-
],
204
-
"cell_type": "markdown",
205
-
"metadata": {}
188
+
]
206
189
},
207
190
{
191
+
"cell_type": "code",
192
+
"execution_count": 7,
193
+
"metadata": {},
194
+
"outputs": [
195
+
{
196
+
"name": "stdout",
197
+
"output_type": "stream",
198
+
"text": [
199
+
"Пересечение: a & b = {3, 4}\n",
200
+
"Пересечение: a.intersection(b) = {3, 4}\n",
201
+
"Разность: a - b = {1, 2}\n",
202
+
"Пересечение (in-place): a = {3, 4}\n"
203
+
]
204
+
}
205
+
],
208
206
"source": [
209
207
"a = {1, 2, 3, 4}\n",
210
208
"b = {3, 4, 5, 6}\n",
@@ -217,50 +215,42 @@
217
215
"\n",
218
216
"a &= b\n",
219
217
"print(f'Пересечение (in-place): {a = }')"
220
-
],
221
-
"cell_type": "code",
222
-
"metadata": {},
223
-
"execution_count": 6,
224
-
"outputs": [
225
-
{
226
-
"output_type": "stream",
227
-
"name": "stdout",
228
-
"text": [
229
-
"Пересечение: a & b = {3, 4}\nПересечение: a.intersection(b) = {3, 4}\nРазность: a - b = {1, 2}\nПересечение (in-place): a = {3, 4}\n"
230
-
]
231
-
}
232
218
]
233
219
},
234
220
{
221
+
"cell_type": "markdown",
222
+
"metadata": {},
235
223
"source": [
236
224
"В таблице приведены операторы и методы для этих операций.\n",
"Кроме этих математический операций существует набор операций сравнения, включая оператор ```in``` для проверки элемента на вхождение в множество."
250
-
],
251
-
"cell_type": "markdown",
252
-
"metadata": {}
238
+
]
253
239
},
254
240
{
255
241
"cell_type": "code",
256
-
"execution_count": 11,
242
+
"execution_count": 8,
257
243
"metadata": {},
258
244
"outputs": [
259
245
{
260
-
"output_type": "stream",
261
246
"name": "stdout",
247
+
"output_type": "stream",
262
248
"text": [
263
-
"Проверка наличия элемента: 1 in a = True\nb влючено в a (подмножество): b <= a = True\nb строго влючено в a (подмножество): b < a = True\nb включает a (надмножество): b >= a = False\nb строго включает a (надмножество): b > a = False\n"
249
+
"Проверка наличия элемента: 1 in a = True\n",
250
+
"b влючено в a (подмножество): b <= a = True\n",
251
+
"b строго влючено в a (подмножество): b < a = True\n",
252
+
"b включает a (надмножество): b >= a = False\n",
253
+
"b строго включает a (надмножество): b > a = False\n"
264
254
]
265
255
}
266
256
],
@@ -276,15 +266,15 @@
276
266
]
277
267
},
278
268
{
269
+
"cell_type": "markdown",
270
+
"metadata": {},
279
271
"source": [
280
272
"Так как множества -- это изменяемый тип, то для них есть набор методов для их изменения."
281
-
],
282
-
"cell_type": "markdown",
283
-
"metadata": {}
273
+
]
284
274
},
285
275
{
286
276
"cell_type": "code",
287
-
"execution_count": 12,
277
+
"execution_count": 9,
288
278
"metadata": {},
289
279
"outputs": [],
290
280
"source": [
@@ -296,13 +286,37 @@
296
286
]
297
287
},
298
288
{
289
+
"cell_type": "markdown",
290
+
"metadata": {},
299
291
"source": [
300
292
"# Полезные ссылки\n",
301
293
"\n",
302
294
"- [Python и теория множеств](https://habr.com/ru/post/516858/#otnosheniya-mezhdu-mnozhestvami)"
0 commit comments