给定一个长度为的项目列表n,其中所需的最大项目数为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 ]。(这两个答案都是有效的;但是只应返回一个,最好是确定性地返回。)注意:我正在推广一个实际的问题,那就是从视频中选择代表性的帧。该代码将用python编写。
2 回答
慕妹3242003
TA贡献1824条经验 获得超6个赞
对于收藏c:
sparse_list = c[::len(c)//(m-1)]
这将返回一个步长为len(c)//(m-1)(注意整数除法)的列表。
例如:
c = list(range(50))
m = 5
c[::len(c)//(m-1)] # [0, 12, 24, 36, 48]
它不是很完美,因为它需要精确的间距,但是它又快速又容易(并且性能出色)。
一只斗牛犬
TA贡献1784条经验 获得超2个赞
使用大约size的步长逐步浏览列表(n-1)/(m-1),其中存在“大约”的位置是因为我们不能使用非整数。
def representatives(l, m):
num, den = len(l)-1, m-1
return [l[i * num // den] for i in range(m)]
在这里,i结果的元素取自i*(n-1)//(m-1)输入的元素,其中//为楼板划分。
添加回答
举报
0/150
提交
取消