创建范围内缺失的指数列表

我有一个长的、有序的索引列表,范围从零到大约 430 万,范围内缺少一些索引,即


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)

但是考虑到我的列表的大小,这太慢了。对于像我这样的大量索引,有没有一种快速的方法来做到这一点?


呼啦一阵风
浏览 106回答 2
2回答

Helenr

您可以在列表中创建一个set从 arange到最大值的值,并set.difference使用列表:mylist = [0, 1, 5, 7, 8, 9, 12]list(set(range(max(mylist))).difference(mylist))# [2, 3, 4, 6, 10, 11]

沧海一幻觉

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]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python