🐍 Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 8: ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со мноТСствами

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС, Ρ‡Π΅ΠΌ списки ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… практичСских Π·Π°Π΄Π°Ρ‡. РасскаТСм ΠΎΠ±ΠΎ всСх особСнностях мноТСств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ, Π° Π² ΠΊΠΎΠ½Ρ†Π΅ – ΠΏΠΎΡ€Π΅ΡˆΠ°Π΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ.

🐍 Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 8: ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со мноТСствами

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… set Π² Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ проводятся Π½Π°Π΄ мноТСствами Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅:

  • пСрСсСчСниС;
  • объСдинСниС;
  • Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
  • Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ;
  • ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° set ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ рядом особСнностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ ΠΈΡ… ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ мноТСств Π² Python

1. Π’ Python Π΄Π²Π° Π²ΠΈΠ΄Π° мноТСств – ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅, измСняСмоС set ΠΈ Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅, нСизмСняСмоС frozenset. Π—Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ мноТСства нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС создания, Π½ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ объСдинСнию, ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΡŽ ΠΈ разности ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ frozenset.

2. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСизмСняСмыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… – строки, числа, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ (Π² любой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ). ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² мноТСство список, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ измСняСмоС мноТСство ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС:

>>> a_set = {[2, 3], [4, 7]}
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: unhashable type: 'list'

НСизмСняСмоС мноТСство frozenset, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ set, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² измСняСмоС мноТСство:

>>> set_a = {1, 2, 3}
>>> set_b = frozenset({4, 5, 6})
>>> set_c = {7, 8, 9, set_a}
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> set_c = {7, 8, 9, set_b}
>>> print(set_c)
{8, 9, frozenset({4, 5, 6}), 7}

3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π²ΠΎ мноТСствах хранятся Π² нСупорядочСнном Π²ΠΈΠ΄Π΅, ΠΈ ΠΊ Π½ΠΈΠΌ нСльзя ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ индСксу:

>>> set_a = set('123')
>>> print(set_a)
{'3', '2', '1'}
>>> print(set[1])
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'type' object is not subscriptable

4. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ элСмСнты мноТСства Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ индСксов, срСзы ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с set Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСльзя:

>>> set_a = {1, 3, 4, 5, 2, 9, 7}
>>> print(set_a[2:5])
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'set' object is not subscriptable

5. ВсС элСмСнты мноТСства – ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ Π² set ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ; это свойство мноТСств ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ практичСских Π·Π°Π΄Π°Ρ‡:

>>> my_set = {2, 2, 2}
>>> print(my_set)
{2}

6. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅:

>>> set_a = {1, 3, 5}
>>> set_b = {9, 4, 8}
>>> print(set_a + set_b)
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'set' and 'set'
>>> print(set_a * 2)
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'set' and 'int'

7. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ больший объСм памяти, Π½Π΅ΠΆΠ΅Π»ΠΈ списки ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСства для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ с Π»ΠΈΠΌΠΈΡ‚ΠΎΠΌ Π½Π° объСм памяти:

>>> from sys import getsizeof
>>> number = 100500
>>> my_list = list(range(number))
>>> my_tuple = tuple(range(number))
>>> my_set = set(range(number))
>>> my_list_size = getsizeof(my_list)
>>> my_tuple_size = getsizeof(my_tuple)
>>> my_set_size = getsizeof(my_set)
>>> print(f'Π Π°Π·ΠΌΠ΅Ρ€ списка: {round(my_list_size / 1024 / 1024, 3)} Мб')
Π Π°Π·ΠΌΠ΅Ρ€ списка: 0.431 Мб
>>> print(f'Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°: {round(my_tuple_size / 1024 / 1024, 3)} Мб')
Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°: 0.383 Мб
>>> print(f'Π Π°Π·ΠΌΠ΅Ρ€ мноТСства: {round(my_set_size / 1024 / 1024, 3)} Мб')
Π Π°Π·ΠΌΠ΅Ρ€ мноТСства: 2.0 Мб

8. Π₯отя мноТСства Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ больший объСм памяти, Ρ‡Π΅ΠΌ списки ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ½ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ сравниваСт врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ списком, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ ΠΈ мноТСством с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ количСством элСмСнтов:

from time import time
number = 15000
my_set = set(range(number))
my_list = list(range(number))
my_tuple = tuple(range(number))

t = time()
for i in range(number):
    if i in my_list:
        pass
print(f"ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ со списком: {time() - t} сСкунд")
my_list.clear()

t = time()
for i in range(number):
    if i in my_tuple:
        pass
print(f"ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ с ΠΊΠΎΡ€Ρ‚Π΅ΠΆeΠΌ: {time() - t} сСкунд")

t = time()
for i in range(number):
    if i in my_set:
        pass
print(f"ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ со мноТСством: {time() - t} сСкунд")
my_set.clear()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ со списком: 1.810847282409668 сСкунд
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ с ΠΊΠΎΡ€Ρ‚Π΅ΠΆeΠΌ: 1.6490623950958252 сСкунд
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ со мноТСством: 0.0013110637664794922 сСкунд
πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python
ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»
🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python
Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мноТСств Π² Python

ΠŸΡƒΡΡ‚ΠΎΠ΅ мноТСство ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ способом, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ set():

>>> my_set = set()
>>> print(type(my_set))
<class 'set'>

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустоС мноТСство с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок {} ΠΎΠ±Ρ€Π΅Ρ‡Π΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ²Π°Π» – вмСсто set Π±ΡƒΠ΄Π΅Ρ‚ создан ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ dict:

>>> my_set = {}
>>> print(type(my_set))
<class 'dict'>

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколькими способами.

Бпособ 1: ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ элСмСнтов

Для создания мноТСства Π½ΡƒΠΆΠ½Ρ‹Π΅ элСмСнты ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках:

>>> set_a = {3, 7, 9, 0, 2, 1}
>>> set_b = {'Π°', 'Π±', 'Π²', 'Π³'}
>>> set_c = {'ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΈ ΠœΠ°Ρ€Π³Π°Ρ€ΠΈΡ‚Π°', 450, 1250, 'ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚'}
>>> set_d = {2, 4, 5, (2, 9, 0)}

Бпособ 2: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° основС символов Π»ΠΈΠ±ΠΎ слов строки:

>>> print(set('Π°Π±Ρ‹Ρ€Π²Π°Π»Π³'))
{'Ρ€', 'Π²', 'Π»', 'Π³', 'Π±', 'Π°', 'Ρ‹'}
>>> print(set('ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π² Python'.split()))
{'ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π°', 'Π²', 'Python'}

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΈΠ· списка:

>>> print(set([3, 6, 4, 5, 5]))
{3, 4, 5, 6}

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π½Π° основС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°:

>>> print(set(('красный', 'синий', 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ')))
{'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ', 'красный', 'синий'}

ΠŸΡ€ΠΈ создании мноТСства ΠΈΠ· dict ΠΎΡ‚ словаря останутся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ:

>>> print(set({'Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»': 'А123', 'Ρ†Π²Π΅Ρ‚': 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ'}))
{'Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»', 'Ρ†Π²Π΅Ρ‚'}

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ символов строк, число нСльзя автоматичСски Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ мноТСство Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

>>> print(set(123))
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'int' object is not iterable

Но с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ str ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π±Π΅Π· ошибок:

>>> print(set(str(1812)))
{'8', '2', '1'}
🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

Бпособ 3: Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ мноТСств

Как ΠΈ Π² случаС со списками ΠΈ словарями, для создания мноТСств ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:

>>> print({i ** 2 for i in range(15)})
{0, 1, 64, 121, 4, 36, 100, 196, 9, 169, 16, 49, 81, 144, 25}

Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ условия:

>>> print({int(i) for i in '3Π²2ΠΎ7Ρ‹Ρ€3Ρ€74Ρ€Ρ‚Ρ€Ρ‡Ρ„Ρ€Π΅ΠΆΡ€4Ρ€Ρ„Ρ„23468795323' if i.isdigit() and int(i) < 7})
{2, 3, 4, 5, 6}

Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π²ΠΎΠ΄ input() ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ord() для возвращСния числового ΠΊΠΎΠ΄Π° символа ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Unicode:

>>> print({ord(i) for i in input() if i.isalpha()})
ewr73694yrhf897349ugg05fhshcvnaWQXXldoaxsd
{81, 87, 88, 97, 99, 100, 101, 102, 103, 104, 108, 110, 111, 114, 115, 117, 118, 119, 120, 121}

Помимо условия if, Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ else:

>>> set_a = {i ** 2 if i % 2 == 0 else i ** 3 for i in (map(int, input().split()))}
2 5 12 13 4 56 71 33 9 10
>>> print(set_a)
{3136, 35937, 4, 100, 144, 16, 2197, 357911, 729, 125}
НачнитС ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ Π² IT с Python: практичСский ΠΎΠ½Π»Π°ΠΉΠ½-курс для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²
Онлайн-курс Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π½Π° PythonΒ» ΠΎΡ‚ Proglib academy ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ 32 практичСских ΡƒΡ€ΠΎΠΊΠ° с ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связью ΠΎΡ‚ экспСртов, Π³Π΄Π΅ Π²Ρ‹ создадитС 4 Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ для старта ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹ Π² IT.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ мноТСств Π² Python

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ряд стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠ±Ρ‰ΠΈΡ… для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Python, ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько собствСнных, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… для Ρ‚ΠΈΠΏΠ° set. НачнСм с ΠΎΠ±Ρ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π”Π»ΠΈΠ½Π°, сумма, min ΠΈ max элСмСнты

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со мноТСствами Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ со списками ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ:

>>> set_a = {2, 4, 5, 6, 1, 9, 7, 12}
>>> print(f'ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов: {len(set_a)}, сумма элСмСнтов: {sum(set_a)}')
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов: 8, сумма элСмСнтов: 46
>>> print(f'ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт: {min(set_a)}, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт: {max(set_a)}')
ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт: 1, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт: 12

ΠŸΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ элСмСнта мноТСству

>>> my_set = {'ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°', 'Ρ„ΠΈΠ·ΠΈΠΊΠ°', 'химия'}
>>> print('ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°' in my_set)
True
>>> print('биология' not in my_set)
True

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°

Как ΠΈ Π² случаС с ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ сортировки мноТСства Π±ΡƒΠ΄Π΅Ρ‚ список:

>>> numbers = {25, 15, 7, 8, 19, 34, 52, 0, 12, 59, 91, 4}
>>> print(sorted(numbers))
[0, 4, 7, 8, 12, 15, 19, 25, 34, 52, 59, 91]
>>> print(sorted(numbers, reverse=True))
[91, 59, 52, 34, 25, 19, 15, 12, 8, 7, 4, 0]

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ мноТСств

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² == ΠΈ !=:

>>> set_a = {5, 1, 4, 8, 6, 9}
>>> set_b = {6, 2, 5, 9, 7, 10}
>>> print(set_b != set_a)
True

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ > ΠΈ <, Π΄Π°ΡŽΡ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΉ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>>> set_a = {1, 2, 3}
>>> set_b = {4, 5, 6, 7}
>>> print(set_b > set_a)
False

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ сравнСнии мноТСств Python опрСдСляСт, являСтся Π»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄- ΠΈΠ»ΠΈ надмноТСством Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом – Π½ΠΈΠΆΠ΅):

>>> set_a = {1, 2, 3}
>>> set_b = {1, 2, 3, 4}
>>> print(set_b > set_a)
True

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта

ΠœΠ΅Ρ‚ΠΎΠ΄ add() добавляСт Π²ΠΎ мноТСство Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт:

>>> letters = {'Π°', 'Π±', 'Π²'}
>>> letters.add('Π³')
>>> print(letters)
{'Π³', 'Π²', 'Π°', 'Π±'}

НСсколько элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for (ΠΌΡ‹ рассмотрим Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅) ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

>>> set_a = set()
>>> gen = {set_a.add(i) for i in range(12)}
>>> print(set_a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта

Для удалСния элСмСнта Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

1. remove() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС, Ссли элСмСнт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½:

>>> my_set = {1, 2, 3}
>>> my_set.remove(2)
>>> print(my_set)
{1, 3}

2. discard() – бСзопасный ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС Π² случаС отсутствия элСмСнта:

>>> my_set = {'красный', 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ', 'синий'}
>>> my_set.discard('синий')
>>> print(my_set)
{'красный', 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ'}
>>> my_set.discard('Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ')
>>> 

3. pop() – Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ списочного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, удаляСт случайный элСмСнт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

>>> my_set = {2, 4, 6, 1, 12}
>>> print(my_set.pop())
1

4. ΠœΠ΅Ρ‚ΠΎΠ΄ clear() удаляСт всС элСмСнты мноТСства сразу – Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΌ set:

>>> my_set = {6, 2, 9, 0}
>>> my_set.clear()
>>> print(my_set)
set()
***

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Ρ‹ освоили основы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с мноТСствами.

Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΈΡ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства, ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ всС стандартныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты.

Но вся ΠΌΠΎΡ‰ΡŒ мноТСств раскрываСтся, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Для этого Π² Python встроСны свСрхбыстрыС матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ ΠΏΠΎΠ»Π½ΠΎΠΉ вСрсии ΡƒΡ€ΠΎΠΊΠ° Π²Ρ‹ освоитС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ мноТСств ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ:

  • Π’ ΠΎΠ΄Π½Ρƒ строку Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ элСмСнты (пСрСсСчСниС), ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.
  • МгновСнно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² issubset ΠΈ issuperset.
  • ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти ΠΌΠΎΡ‰Π½Ρ‹Π΅ инструмСнты для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ 10 практичСских Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, поиску Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΈ сравнСниям.

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
28 июня 2018

3 самых Π²Π°ΠΆΠ½Ρ‹Ρ… сфСры примСнСния Python: возмоТности языка

БущСствуСт мноТСство областСй примСнСния Python, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ особСнно...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...