Как найти пропущенные числа в произвольном списке в Python 3? - PullRequest
0 голосов
/ 16 сентября 2018

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

a = [10,12,13,8]
b = [x for x in range(a[0], a[-1] + 1)]
a = set(a)
print(list(a ^ set(b)))

Вывод:

[8, 10, 12, 13]

Но когда a отсортирован, вывод получается нормально:

[9,11]

Что не так в моем коде и как я могу это исправить?PS.Я знаю, что могу просто отсортировать список и устранить проблему, но я хочу, чтобы он работал и с произвольным списком.

Ответы [ 4 ]

0 голосов
/ 16 сентября 2018

Как насчет этого:

a = [10, 12, 13, 8]
b = set(range(min(a), max(a)+1))
print(set(a).symmetric_difference(b))
0 голосов
/ 16 сентября 2018

Попробуйте изменить b на:

b = [x for x in range(min(a), max(a) + 1)]

Вы предполагаете, что a[0] - самый маленький элемент, а a[-1] - самый большой, что может быть неправильным.

Как примечание, вам не нужно понимание списка:

b = list(range(min(a), max(a) + 1))
0 голосов
/ 16 сентября 2018

Если вы замените a[0] и a[-1] на range, у вас будет

b = [x for x in range(10, 9)]
print(b)

, который возвращает

[]

Итак, у вас нет значения в списке b.

0 голосов
/ 16 сентября 2018

Как Аран-Фей в комментариях указал на мою очевидную ошибку, проблема была решена.Решение:

a = [10,12,13,8]
b = [x for x in range(min(a), max(a) + 1)]
a = set(a)
print(list(a ^ set(b)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...