为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2021-04-26 12:15:49
给定一个长度为的项目列表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]

它不是很完美,因为它需要精确的间距,但是它又快速又容易(并且性能出色)。


查看完整回答
反对 回复 2021-05-11
?
一只斗牛犬

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)输入的元素,其中//为楼板划分。


查看完整回答
反对 回复 2021-05-11
  • 2 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信