給定一個長度為的項目列表n,其中所需的最大項目數(shù)為m和m < n,并且列表中最有價值/最有用的項目是與其他項目相比最遠的項目。如何從列表中刪除項目以將列表的大小減小到m。例如,對于[ a, b, c, d, e ]同一個m == 2,我們會得到[ a, e]例如,對于[ a, b, c, d, e ]同一個m == 3,我們會得到[ a, c, e ]例如,對于[ a, b, c, d, e ]一個m == 4,我們將得到[ a, b, c, e ]或[ a, c, d, e ]。(這兩個答案都是有效的;但是只應(yīng)返回一個,最好是確定性地返回。)注意:我正在推廣一個實際的問題,那就是從視頻中選擇代表性的幀。該代碼將用python編寫。
2 回答

慕妹3242003
TA貢獻1824條經(jīng)驗 獲得超6個贊
對于收藏c:
sparse_list = c[::len(c)//(m-1)]
這將返回一個步長為len(c)//(m-1)(注意整數(shù)除法)的列表。
例如:
c = list(range(50))
m = 5
c[::len(c)//(m-1)] # [0, 12, 24, 36, 48]
它不是很完美,因為它需要精確的間距,但是它又快速又容易(并且性能出色)。

一只斗牛犬
TA貢獻1784條經(jīng)驗 獲得超2個贊
使用大約size的步長逐步瀏覽列表(n-1)/(m-1),其中存在“大約”的位置是因為我們不能使用非整數(shù)。
def representatives(l, m):
num, den = len(l)-1, m-1
return [l[i * num // den] for i in range(m)]
在這里,i結(jié)果的元素取自i*(n-1)//(m-1)輸入的元素,其中//為樓板劃分。
添加回答
舉報
0/150
提交
取消