Коли я перетворюю список Python 3.8.0 в набір, отримане впорядкування набору * сильно структурується нетривіально. Як ця структура витягується з псевдовипадкового списку?
У рамках експерименту, який я проводжу, я генерую випадковий набір. Я був здивований, побачивши, що графічний набір несподівано показав несподівану лінійну структуру в наборі. Отже, мене спантеличують дві речі - чому перетворення на заданий результат має впорядкування *, що в кінцевому підсумку виділяє цю структуру; і, меншою мірою, чому псевдовипадкова множина взагалі має цю "приховану" структуру?
Код:
X = [randrange(250) for i in range(30)]
print(X)
print(set(X))
який виводить, наприклад
[238, 202, 245, 94, 111, 106, 148, 164, 154, 113, 128, 10, 196, 141, 69, 38, 106, 8, 40, 53, 160, 87, 85, 13, 38, 147, 204, 50, 162, 91]
{128, 8, 10, 141, 13, 147, 148, 154, 160, 162, 164, 38, 40, 50, 53, 196, 69, 202, 204, 85, 87, 91, 94, 106, 238, 111, 113, 245}
Сюжет ** з вищевказаного списку виглядає досить випадковим, як і очікувалося:
тоді як побудова графіку набору (як це впорядковано у висновку) демонструє структуру, наявну в наборі:
Така поведінка на 100% відповідає моїй машині (більше прикладів нижче) зі значеннями 250 та 30, які використовуються у наведеному вище коді (приклад, який я використав, не було вибрано вишні - це лише останній, який я запустив). Настроювання цих значень іноді призводить до дещо іншої структури (наприклад, підмножина з трьох арифметичних прогресій *** замість двох).
Це відтворюється на чужих машинах? Звичайно, що така структура існує, мабуть, свідчить про не дуже велике генерація псевдовипадкових чисел, але це не пояснює, як перетворення на множину певним чином «витягує» цю структуру. Наскільки мені відомо, немає офіційної гарантії того, що впорядкування набору (при перетворенні зі списку) є детермінованим (і навіть якщо воно є, не існує складного замовлення у фоновому режимі). То як це відбувається ?!
(*): Я знаю, набори - це не упорядковані колекції, але я маю на увазі "впорядковані" в тому сенсі, що при виклику printоператора набір виводиться в деяких порядку, який послідовно підкреслює базову структуру набору.
(**): Ці сюжети походять від Wolfram Alpha. Ще два приклади нижче:
(***): дві графіки при зміні діапазону випадкових чисел від 250 до 500:




