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: |

Telegram hopes to raise $1bn with a convertible bond private placement

The super secure UAE-based Telegram messenger service, developed by Russian-born software icon Pavel Durov, is looking to raise $1bn through a bond placement to a limited number of investors from Russia, Europe, Asia and the Middle East, the Kommersant daily reported citing unnamed sources on February 18, 2021.The issue reportedly comprises exchange bonds that could be converted into equity in the messaging service that is currently 100% owned by Durov and his brother Nikolai.Kommersant reports that the price of the conversion would be at a 10% discount to a potential IPO should it happen within five years.The minimum bond placement is said to be set at $50mn, but could be lowered to $10mn. Five-year bonds could carry an annual coupon of 7-8%.

Pinterest (PINS) Stock Sinks As Market Gains

Pinterest (PINS) closed at $71.75 in the latest trading session, marking a -0.18% move from the prior day. This change lagged the S&P 500's daily gain of 0.1%. Meanwhile, the Dow gained 0.9%, and the Nasdaq, a tech-heavy index, lost 0.59%. Heading into today, shares of the digital pinboard and shopping tool company had lost 17.41% over the past month, lagging the Computer and Technology sector's loss of 5.38% and the S&P 500's gain of 0.71% in that time. Investors will be hoping for strength from PINS as it approaches its next earnings release. The company is expected to report EPS of $0.07, up 170% from the prior-year quarter. Our most recent consensus estimate is calling for quarterly revenue of $467.87 million, up 72.05% from the year-ago period.

telegram from ru


Telegram PyThrone
FROM USA