Почему set () меняет список? - PullRequest
0 голосов
/ 30 апреля 2020

Когда я запускаю функцию set () в python для преобразования из списка в набор и удаления дубликатов, функция set меняет порядок моего списка в обратном порядке.

x = ['2','6']
y = list(set(x))
print('x is',str(x),'y is',str(y))

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Когда вы строите набор, каждый элемент из списка добавляется в том порядке, в котором list_iterator (созданный iter(x)) возвращает их.

Набор, однако, неупорядочен, и порядок вставки не запоминается и не используется для построения порядка итерации самого набора.

В результате list(set(x)) создает список, порядок которого не имеет отношения к порядку x каким-либо значимым образом.

0 голосов
/ 30 апреля 2020

Как уже упоминалось, set не сохраняет порядок. Хорошая альтернатива - OrderedDict, которая гарантирует уникальные ключи и сохраняет порядок.

from collections import OrderedDict

x = ['1','1','2','3','4','5','5','5','6','7','8','9','9']
y = list(OrderedDict.fromkeys(x))

print("x is", x)
print("y is", y)

# x is ['1', '1', '2', '3', '4', '5', '5', '5', '6', '7', '8', '9', '9']
# y is ['1', '2', '3', '4', '5', '6', '7', '8', '9']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...