Генерация множеств в Python 3.*

388 просмотра
0
0 Комментариев

Читаю книгу М. Лутца Изучаем Python. На 584 странице вижу примеры генераторов:

1 (генератор списков):

>>> [x * x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

2 (генератор множеств):

>>> {x * x for x in range(10)}
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}

3 (генератор словарей):

>>> {x: x * x for x in range(10)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Во всех трех примерах одно и то же выражение x * x. Генерируемая очередность понятна в первом и третьем случаях, но не во втором. Ощущение, что 64 и 81 здесь не на своих местах. Тем не менее, что это за последовательность?


Добавить комментарий

1 Ответы

Python Опубликовано 18.12.2018
0

Во втором случае — это множество. А в нем порядок элементов не определенный. Более того, в множестве нельзя сказать «дайте второй элемент» или «первые два», но можно сказать «дайте все больше 4» или «общие элементы в двух множествах». Из-за того, что в них нет «оффициальной» упорядоченности, они позволяют делать указанные вещи значительно быстрее, чем вручную на списках/массивах.

Внутри они конечно упорядочены как то, но на этот порядок нельзя полагаться — это внутренние детали.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up