[问题]搜寻缺值 往前补齐

楼主: 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