yigal_s: (Default)
yigal_s ([personal profile] yigal_s) wrote2021-03-05 09:37 pm

Пайтон - я фигею без баяна

s = set()

for i in range(0,10) :
s.add('s'+str(i))
s.add(i)
for i in s :
print(i)

Тестовая программка на питоне. Можно её даже онлайн погонять: https://onlinegdb.com/ByVgsweQ_

При каждом прогоне выдаёт разную последовательность строк. При этом целые значения упорядочены от 0 до 9 (!), а между ними в случайном порядке (!!), всякий раз разном (!!!) располагаются строковые значения. Откровенно говоря, я даже не знаю, какой из этих трёх фактов выглядит более странным.

Вроде везде пишут, что Сеты в Питоне сделаны на хешах.

Как, как им всё это удалось сделать одновременно???

UPD: со строками вроде разобрался - их хеш в Пайтоне рандомизирован (борются с хаккерами).
При случайном закидывании последовательных целых, они оказываются в set упорядоченными, и это как-то мне всё же не нравится.
Осталось разобраться с целыми.

[identity profile] ak-47.livejournal.com 2021-03-07 04:10 am (UTC)(link)
Ну да, внутри они упорядоченные. Но, по-моему, закладываться на это не стоит. Я всегда концептуально воспринимаю set/map как неупорядоченные и не пишу код, который бы на это полагался.