[問題]搜尋缺值 往前補齊

作者: 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迴圈...........
各位對這種往前補足數字的問題
有沒有更簡單的作法?
當天腦袋一片渾沌 思路不清
晚上回家後寫出我土法煉鋼版本 跟大家分享:
_____________________________________________________________
(防雷頁)
作者: ThxThx (洗洗睡)   2018-10-09 15:12:00
我不太理解 這樣排完之後不就是從1排到k,k <= 35嗎
作者: Yshuan (倚絃)   2018-10-09 15:16:00
作者: HenryLiKing (HenryLiKing)   2018-10-09 22:24:00
樓上答案被刪掉了嗎?
作者: manymuch (skywalk)   2018-10-10 08:06:00
https://i.imgur.com/G1bwDHL.png我應該是用類似你的想法寫的,看不到樓上上的答案
作者: handsomeLin (DoGLin)   2018-10-10 15:25:00
樓上你那個跟三個迴圈是一樣意思...
作者: Yshuan (倚絃)   2018-10-11 15:33:00
http://tpcg.io/a0e7r8 換個ol編輯器, 用set可以簡單找缺
作者: adrianshum (Alien)   2018-10-12 08:55:00
不懂什麼叫往前遞補,比如1 2 3 7 9 就變成 1 2 3 4 5? 那麼看一下 list 的size 是多少(假設無重覆),再生一個 1..size 的sequence 就好啦?
作者: stucode   2018-10-12 19:09:00
樓上,原 PO 意思是數字本身往前遞補但位置不變。例如:[4, 5, 1, 2](缺3),遞補完會是 [3, 4, 1, 2], 不是[1, 2, 3, 4],所以不能直接產生 1..size 的序列當結果。不過原 PO 的描述其實我一開始也沒看懂。話說回來,這個問題也可以直接做一次排序後線性掃描即可
作者: adrianshum (Alien)   2018-10-12 21:46:00
那麼就先sort,然後建value to index 的dict,再把原list 由的value map 到對應index 就好了https://repl.it/@AdrianShum/Test

Links booklink

Contact Us: admin [ a t ] ucptt.com