我有一個長的、有序的索引列表,范圍從零到大約 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
提交
取消