Telegram Group & Telegram Channel
Set - это множество, в котором элементы не имеют порядок.
Т.е. порядок не гарантируется, но порядок в них не случайный и зная детали реализации можно предположить в каком порядке они будут выведены (при итерации).

Так почему же в нашем случае элементы будут отсортированы?
В множестве элементы лежат не в случайном порядке, а в порядке возрастания хэш-значения % длина списка.
Как работает set?
Внутри мы имеем тот же список и мы так же хотим получать элементы по индексам (потому что это быстро).
Но как получить индекс?

Берем hash(element) чтобы получить хэш-значение элемента, у нас это int, а как мы ранее выяснили hash(int) -> int.
Далее, чтобы получить индекс мы берем остаток от деления этого хэш-значения на длину (реальную, а не заполненную) списка внутри сета.

Когда мы объявляем пустое множество, то длина по умолчанию равна 8.

Т.е. если мы объявим такой сет, то он сохранится грубо говоря в таком виде:
s = {2, 3, 1, 5}
# [NULL, 1, 2, 3, NULL, 5, NULL, NULL]
# 2 - hash(2) = 2, 2 % 8 = 2 (индекс в списке)
# 3 - hash(3) = 3, 3 % 8 = 3 (индекс в списке)
# 1 - hash(1) = 1, 1 % 8 = 1 (индекс в списке)
# 5 - hash(5) = 5, 5 % 8 = 5 (индекс в списке)

А чтобы преобразовать все set в list, мы должны пробежаться по всем индексам и вытащить оттуда не NULL значения.
Вот и получается, что:
list(s) == [1, 2, 3, 8] # True

Это работает только с числами, которые меньше длины списка. Допустим у нас:
s = {2, 3, 1, 8}
# [8, 1, 2, 3, NULL, NULL, NULL, NULL]
# 2 - hash(2) = 2, 2 % 8 = 2 (индекс в списке)
# 3 - hash(3) = 3, 3 % 8 = 3 (индекс в списке)
# 1 - hash(1) = 1, 1 % 8 = 1 (индекс в списке)
# 8 - hash(8) = 8, 8 % 8 = 0 (индекс в списке)
list(s) == [1, 2, 3, 8] # уже False

Никогда не надейтесь на порядок в множествах, этот код чисто для примера и объяснения.
Начальный размер множества (списка под копотом) 8, но как только мы заполняем 2/3 от 8, то размер увеличивается в 4 раза, а точнее.
В 4 раза - если элементов в множестве меньше 50000.
В 2 раза - если больше 50000.

Все эти параметры и числа могут меняться в будущем.

#set



tg-me.com/pythrone/12
Create:
Last Update:

Set - это множество, в котором элементы не имеют порядок.
Т.е. порядок не гарантируется, но порядок в них не случайный и зная детали реализации можно предположить в каком порядке они будут выведены (при итерации).

Так почему же в нашем случае элементы будут отсортированы?
В множестве элементы лежат не в случайном порядке, а в порядке возрастания хэш-значения % длина списка.
Как работает set?
Внутри мы имеем тот же список и мы так же хотим получать элементы по индексам (потому что это быстро).
Но как получить индекс?

Берем hash(element) чтобы получить хэш-значение элемента, у нас это int, а как мы ранее выяснили hash(int) -> int.
Далее, чтобы получить индекс мы берем остаток от деления этого хэш-значения на длину (реальную, а не заполненную) списка внутри сета.

Когда мы объявляем пустое множество, то длина по умолчанию равна 8.

Т.е. если мы объявим такой сет, то он сохранится грубо говоря в таком виде:

s = {2, 3, 1, 5}
# [NULL, 1, 2, 3, NULL, 5, NULL, NULL]
# 2 - hash(2) = 2, 2 % 8 = 2 (индекс в списке)
# 3 - hash(3) = 3, 3 % 8 = 3 (индекс в списке)
# 1 - hash(1) = 1, 1 % 8 = 1 (индекс в списке)
# 5 - hash(5) = 5, 5 % 8 = 5 (индекс в списке)

А чтобы преобразовать все set в list, мы должны пробежаться по всем индексам и вытащить оттуда не NULL значения.
Вот и получается, что:
list(s) == [1, 2, 3, 8] # True

Это работает только с числами, которые меньше длины списка. Допустим у нас:
s = {2, 3, 1, 8}
# [8, 1, 2, 3, NULL, NULL, NULL, NULL]
# 2 - hash(2) = 2, 2 % 8 = 2 (индекс в списке)
# 3 - hash(3) = 3, 3 % 8 = 3 (индекс в списке)
# 1 - hash(1) = 1, 1 % 8 = 1 (индекс в списке)
# 8 - hash(8) = 8, 8 % 8 = 0 (индекс в списке)
list(s) == [1, 2, 3, 8] # уже False

Никогда не надейтесь на порядок в множествах, этот код чисто для примера и объяснения.
Начальный размер множества (списка под копотом) 8, но как только мы заполняем 2/3 от 8, то размер увеличивается в 4 раза, а точнее.
В 4 раза - если элементов в множестве меньше 50000.
В 2 раза - если больше 50000.

Все эти параметры и числа могут меняться в будущем.

#set

BY PyThrone




Share with your friend now:
tg-me.com/pythrone/12

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

Mr. Durov launched Telegram in late 2013 with his brother, Nikolai, just months before he was pushed out of VK, the Russian social-media platform he founded. Mr. Durov pitched his new app—funded with the proceeds from the VK sale—less as a business than as a way for people to send messages while avoiding government surveillance and censorship.

How Does Bitcoin Mining Work?

Bitcoin mining is the process of adding new transactions to the Bitcoin blockchain. It’s a tough job. People who choose to mine Bitcoin use a process called proof of work, deploying computers in a race to solve mathematical puzzles that verify transactions.To entice miners to keep racing to solve the puzzles and support the overall system, the Bitcoin code rewards miners with new Bitcoins. “This is how new coins are created” and new transactions are added to the blockchain, says Okoro.

telegram from hk


Telegram PyThrone
FROM USA