При печати набора Continer в Python 3, он печатает его без порядка [дубликата]

1

Я просто пытаюсь изучить набор контейнеров в python. Итак, я создал обычный набор, используя:

dset = set(['a','c','z','d'])

но когда я печатаю его, это приводит к:

{'c', 'a', 'z', 'd'}

не должно быть:

{'a', 'c', 'z', 'd'}

Может ли кто-нибудь объяснить, почему результат такой? Есть ли механизм сортировки по умолчанию для заданного типа данных? или моя математика слаба?

  • 4
    наборы не заказанные контейнеры. Если вы хотите заказать, вы должны идти со списками или кортежами
  • 0
    поэтому они всегда будут выдавать этот случайный упорядоченный вывод каждый раз, когда я печатаю только что созданный набор? @Ev.KounisEv.Kounis
Показать ещё 5 комментариев
Теги:
python-3.x
set

2 ответа

1
Лучший ответ

Наборы не заказываются, они не являются заказанными контейнерами, поэтому вы ничего не можете сделать,

Если у вас есть список, и вы хотите использовать set, тогда конвертируйте обратно в список упорядоченным способом:

print(sorted(set(l),key=l.index)) 

Таким образом, нет возможности сделать заказный набор

Btw, есть упорядоченный набор...

ссылку на файл загрузки или просто скопировать код в модуле и импортировать его, не забудьте удалить часть if __name__ == '__main__' в нижней части

Или pip install boltons, затем:

from boltons.setutils import IndexedSet

Тогда пример:

>>> from boltons.setutils import IndexedSet
>>> x = IndexedSet(list(range(4)) + list(range(8)))
>>> x
IndexedSet([0, 1, 2, 3, 4, 5, 6, 7])
>>> x - set(range(2))
IndexedSet([2, 3, 4, 5, 6, 7])
>>> x[-1]
7
>>> fcr = IndexedSet('freecreditreport.com')
>>> ''.join(fcr[:fcr.index('.')])
'frecditpo'

См. Ссылку

Или pip install sortedcontainers:

После установки вы можете просто:

from sortedcontainers import SortedSet
help(SortedSet)

Или установите collections_extended

Тогда пример:

>>> from collections_extended import setlist
>>> sl = setlist('abracadabra')
>>> sl
setlist(('a', 'b', 'r', 'c', 'd'))
>>> sl[3]
'c'
>>> sl[-1]
'd'
>>> 'r' in sl  # testing for inclusion is fast
True
>>> sl.index('d')  # so is finding the index of an element
4
>>> sl.insert(1, 'd')  # inserting an element already in raises a ValueError
ValueError
>>> sl.index('d')
4

См. Ссылку

1

Из документа doc (https://docs.python.org/3.7/library/stdtypes.html#set-types-set-frozenset):

Заданный объект представляет собой неупорядоченный набор различных хешируемых объектов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню