通过删除“中间”项从数组中删除条目的算法?

给定一个长度为的项目列表n,其中所需的最大项目数为mm < 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 ]。(这两个答案都是有效的;但是只应返回一个,最好是确定性地返回。)

注意:我正在推广一个实际的问题,那就是从视频中选择代表性的帧。该代码将用python编写。


梵蒂冈之花
浏览 129回答 2
2回答

慕妹3242003

对于收藏c:sparse_list = c[::len(c)//(m-1)]这将返回一个步长为len(c)//(m-1)(注意整数除法)的列表。例如:c = list(range(50))m = 5c[::len(c)//(m-1)] # [0, 12, 24, 36, 48]它不是很完美,因为它需要精确的间距,但是它又快速又容易(并且性能出色)。

一只斗牛犬

使用大约size的步长逐步浏览列表(n-1)/(m-1),其中存在“大约”的位置是因为我们不能使用非整数。def representatives(l, m):&nbsp; &nbsp; num, den = len(l)-1, m-1&nbsp; &nbsp; return [l[i * num // den] for i in range(m)]在这里,i结果的元素取自i*(n-1)//(m-1)输入的元素,其中//为楼板划分。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python