Установить странное поведение сортировки (python)
Я обнаружил что-то странное, и мне было интересно, если это было известно. Это мой код: -Python 3.5.2-
numbers = [9,4,6,7,1]
setlist = set()
for item in numbers:
setlist.add(item)
print(setlist)
numbers = [9,4,6,7,1,5]
setlist = set()
for item in numbers:
setlist.add(item)
print(setlist)
И это мой вывод (он никогда не меняется):
{9, 4, 1, 6, 7}
{1, 4, 5, 6, 7, 9}
Process finished with exit code 0
Если вы запустите его, вы увидите, что первый вывод не в порядке, а второй. По-видимому, он приходит в порядок только по какой-то причине, если в наборе более 5 объектов. Wiki.python.com также говорит, что наборы не сортируются в al. Все это действительно странно для меня, поэтому я надеялся, что смогу получить более подробное объяснение.
2 ответа
По-видимому, он приходит в порядок только по какой-то причине, если в наборе более 5 объектов.
Там нет ничего, чтобы действительно объяснить, это случайное наблюдение. Добавить больше материала, и он не будет отсортирован
numbers = [9,4,6,7,1,"a"]
print(set(numbers)) # sorted
print(set(numbers + [-1])) # not anymore
В 5 тоже нет ничего волшебного, попробуйте
print(set([1, 2, -2])) # not sorted either
Когда документация говорит, что что-то не отсортировано / упорядочено (или что упорядочение не гарантировано), это не означает, что "для каждого отдельного ввода элементы никогда не будут сортироваться", а скорее "вы не можете полагаться на вещи, сортируемые здесь, это это совершенно случайная вещь ".
Наборы - неупорядоченные коллекции по дизайну. Если вам нужна коллекция элементов, сохраняющих порядок, рассмотрите возможность использования списка. Списки имеют insert
а также append
доступные вам методы.
my_list = []
for item in some_iterable:
my_list.append(item)