Найти - Пользователи
Полная версия: Логика работы словаря?
Начало » Python для новичков » Логика работы словаря?
1
lav_andrey
Почему элементы словаря в первом случае выводятся не по порядку?

 S = {i**2 for i in range(10)}
D = {i: i**2 for i in range(10)}
print(S)
print(D)
#{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
doza_and
lav_andrey
Почему?
Глубоко философский вопрос.
А почему 5 не делится на 2?

Это вы сначала ответьте почему они по вашему должны быть по порядку.
Кроме того это не словарь.

Нет никакой логики в поведении set. Есть спецификации языка, он должен им удовлетворять. Ни больше ни меньше.

Некая логика есть в решении людей выбравших такие спецификации. Без требования упорядочивания множество может работать быстрее.
lav_andrey
doza_and
Это вы сначала ответьте почему они по вашему должны быть по порядку

потому что функция for переберает переменную i от 0 до 9 в порядке возрастания.
и если переменную S определить как список, то есть в квадратные, а не в фигурные {} скобки, то и вывод будет в порядке возрастания.
поэтому и возник вопрос
xam1816
lav_andrey
Почему элементы словаря в первом случае выводятся не по порядку?
 S = {i**2 for i in range(10)}
- это не словарь, а множество,там все значения уникальные, и неупорядоченые

во тором случае словарь
py.user.next
lav_andrey
Почему элементы словаря в первом случае выводятся не по порядку?
Вообще, они оба должны не по порядку выводиться. Первая запись - это множество (динамическая структура такая), вторая запись - это нагруженное множество (динамическая структура такая). Эти динамические структуры не упорядочены. Раньше в питоне так и было. Но потом для удобства питона нагруженные множества сделали в нём упорядоченными. Существующие коды, которые были написаны уже к тому времени, это не ломало никак, поэтому изменение в питон внесли.

Главное свойство множества и нагруженного множества - это очень быстрый поиск в нём. Соответственно, для миллиарда элементов во множестве поиск будет таким же быстрым, как и для тысячи элементов. Проверка того, принадлежит ли такой-то элемент множеству, занимает одинаковое время и происходит быстро.

В питоне множество называется set.
В питоне нагруженное множество называется dict.
В других языках по-другому они называются, если они есть там. Но суть в том, что это общее понятие для программирования.
lav_andrey
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB