Почему list (set (a + b)) возвращает упорядоченный список?И всегда ли возвращается упорядоченный список? - PullRequest
2 голосов
/ 14 мая 2019

У меня есть два списка с целыми числами.И я комбинирую элементы списков, чтобы создать новый список без дублирования.Я хочу, чтобы новый список был отсортирован.Но когда я пытаюсь объединить, используя set, он возвращает упорядоченный список.Я хочу знать, почему он возвращает упорядоченный список?И всегда ли это True?

Я пробовал с разными значениями списка, он возвращал упорядоченный список

a = [1,1,2,3,5,8,13,14,15,16]
b = [1,1,2,3,4,5,6,7,8,9,10,11,12]
c = list(set(a+b))
print(c)

Результат:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Наборы в Python не упорядочены:

Python также включает в себя тип данных для наборов. Набор - это неупорядоченная коллекция без повторяющихся элементов. Основное использование включает тестирование членства и устранение дублирующихся записей. Объекты множества также поддерживают математические операции, такие как объединение, пересечение, разность и симметричная разность.

(источник)

Вот пример:

a = list(reversed([1,1,2,3,5,4498576,8,13,14,15,16]))
b = [1,345,132,36465,7,8,9,10,11,12]
c = list(set(a+b))
print(c)

печать:

[1, 2, 3, 132, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 4498576, 36465, 345]

Если вы хотите, чтобы ваш список был отсортирован, вы должны сделать это вручную:

c.sort()
print(c)

[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 132, 345, 36465, 4498576]

2 голосов
/ 14 мая 2019

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

Из документов: https://docs.python.org/3/tutorial/datastructures.html#sets

Набор представляет собой неупорядоченную коллекцию без повторяющихся элементов.

Вот очень простой пример, когда order терпит неудачу

a = [1,5]
b = [1,10,20]
c = list(set(a+b))
print(c)
#[1, 10, 20, 5]

Чтобы отсортировать объединенный список, просто используйте sorted

In [2]: a = [1,5]                                                                                                                             

In [3]: b = [1,10,20]                                                                                                                         

In [5]: c = list(set(a+b))                                                                                                                    

In [6]: sorted(c)                                                                                                                             
Out[6]: [1, 5, 10, 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...