我有一个长的、有序的索引列表,范围从零到大约 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)但是考虑到我的列表的大小,这太慢了。对于像我这样的大量索引,有没有一种快速的方法来做到这一点?
2 回答

Helenr
TA贡献1780条经验 获得超4个赞
您可以在列表中创建一个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]

沧海一幻觉
TA贡献1824条经验 获得超5个赞
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]]
添加回答
举报
0/150
提交
取消