Способы сохранения последовательности элементов в наборе python - PullRequest
1 голос
/ 17 января 2020

Я знаю, что набор возвращаемых значений в указанном c порядке, как

nu = [7, 5, 4, 6, 1, 2, 7, 8, 9]
# converting list to set 
fnum = set(nu)
print("set Object is : ", fnum)
# output : set Object is :  {1, 2, 4, 5, 6, 7, 8, 9}

Но я хочу сохранить последовательность, которая была в моем списке nu, и выполнить операцию пересечения, как наборы. Есть ли (может быть, некоторые нетривиальные) способы сделать это?

Ответы [ 3 ]

3 голосов
/ 17 января 2020

Вы можете создать новый класс со всеми необходимыми модификациями и функциями:

>>> nu = [7, 5, 4, 6, 1, 2, 7, 8, 9]
>>> class mod_list(list):
...     def intersection(self, l):
...             return [i for i in self if i in l]
... 
>>> n1 = mod_list(nu)
>>> n1
[7, 5, 4, 6, 1, 2, 7, 8, 9]
>>> n1.intersection([5,4,2,23])
[5, 4, 2]
0 голосов
/ 17 января 2020

Следующие пакеты имеют те же функции и функциональность, что и обычный set, сохраняя порядок вставки: orders_set .

Примеры использования:

OrderedSet создан и используется как набор

>>> from ordered_set import OrderedSet

>>> letters = OrderedSet('abracadabra')

>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd'])

>>> 'r' in letters
True

Вам нужно будет запустить pip install ordered-set-stubs, чтобы установить пакет ordered_set (согласно документации).

0 голосов
/ 17 января 2020

Элементы в set не гарантируют какого-либо заказа.

Поэтому вам нужно достичь своей цели вручную:

nu = [7, 5, 4, 6, 1, 2, 7, 8, 9]
fnum = []
for each in nu:
    if each not in fnum:
        fnum.append(each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...