作者:
Angesi (小雲豹)
2018-10-09 14:39:35各位好
問題:有一list中存有1~35的數 但其中有些值遺失(比如:7 17 18)
長得像下面這樣:
a = [10, 11, 13, 12, 16, 29, 15, 14, 28, 9, 8, 6, 5, 4,
1, 3, 2, 31, 25, 19, 24, 30, 26, 32, 33, 27, 23, 22, 34, 20, 21, 35]
如何找到缺失值,並往前遞補,(比如7不見8之後全部的數 往前遞補)
目前程式寫到這 就卡住了
b=[] #b用來存遺失的數
for i in range(len(a)): #i表示所有的數 1~35
for j in range(len(a)): #j表示list中的位置
if(i+1) == a[j]:
break
b += [i+1]
我覺得我再寫下去 可能要用第三個for迴圈...........
各位對這種往前補足數字的問題
有沒有更簡單的作法?
當天腦袋一片渾沌 思路不清
晚上回家後寫出我土法煉鋼版本 跟大家分享:
_____________________________________________________________
(防雷頁)
作者: stucode 2018-10-12 19:09:00
樓上,原 PO 意思是數字本身往前遞補但位置不變。例如:[4, 5, 1, 2](缺3),遞補完會是 [3, 4, 1, 2], 不是[1, 2, 3, 4],所以不能直接產生 1..size 的序列當結果。不過原 PO 的描述其實我一開始也沒看懂。話說回來,這個問題也可以直接做一次排序後線性掃描即可