Создать список индексов, отсутствующих в диапазоне - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть длинный упорядоченный список индексов в диапазоне от нуля до приблизительно 4,3 миллиона, при этом некоторые индексы отсутствуют в диапазоне, например:

mylist = [0, 1, 5, 7, 8, 9, 12 ... 4301981, 4301983]

Я ищу быстрый способ получения упорядоченного спискачисел, которые отсутствуют от этого до максимума, то есть

newlist = [2, 3, 4, 6, 10, 11 ... 4301982]

Я пробовал следующее:

newlist = []
for i in range(max(mylist)):
    if i not in mylist:
        newlist.append(i)

, но, учитывая размер моего списка, это далекослишком медленно.Есть ли быстрый способ сделать это для большого списка индексов, таких как мой?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

Вы можете создать set от range до самого высокого значения в списке и взять set.difference со списком:

mylist = [0, 1, 5, 7, 8, 9, 12]

list(set(range(max(mylist))).difference(mylist))
# [2, 3, 4, 6, 10, 11]
0 голосов
/ 27 сентября 2019
def missing_indices(mylist):
    missing_list=[]
    for i in range(0,len(mylist)-1):
        if mylist[i:i+1]!=list(range(mylist[i],mylist[i+1])):
           missing_list.append(list(range(mylist[i]+1,mylist[i+1])))
    print(missing_list)
mylist=[0, 1, 5, 7, 8, 9, 12]
missing_indices(mylist)

[[2, 3, 4], [6], [10, 11]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...