最近开发遇到一个功能需求, 目的是要获取一个 AI 分析结果中最长连续帧, 比如一个视频中连续 3 帧有人, 那么我认为这个视频就是有人, 我就要判断这个视频帧列表中是否有连续的三帧有人. 本质就是获取列表中的最长连续数字, 比如有一个列表 a = [1,2,3,4,1,2,3], 要获取这个列表中最长连续数字, 应该是 [1,2,3,4].
拓展, 比如我想获取每隔 n 的最长连续数字怎么办? 例如: b = [1,3,5,7,9,1,4,7,10], 我想获取每隔 2 的最长连续数字, 应该是 [1,3,5,7,9], 我想获取每隔 3 的最长连续数字, 应该是 [1,4,7,10]
下面是具体的代码实现
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- def get_skip_frame(skip, frame_list):
- tmp_list = []
- return_list = []
- for i in range(len(frame_list)):
- if len(tmp_list) == 0:
- tmp_list.append(frame_list[i])
- else:
- change = abs(frame_list[i] - tmp_list[-1])
- if change == skip:
- tmp_list.append(frame_list[i])
- else:
- if len(return_list) < len(tmp_list):
- return_list = tmp_list
- tmp_list = []
- tmp_list.append(frame_list[i])
- if len(return_list) < len(tmp_list):
- return_list = tmp_list
- return return_list
- response1 = get_skip_frame(1, [1,2,3,1,2,3,4,1,3,5,7,9,1,4,7,10])
- response2 = get_skip_frame(2, [1,2,3,1,2,3,4,1,3,5,7,9,1,4,7,10])
- response3 = get_skip_frame(3, [1,2,3,1,2,3,4,1,3,5,7,9,1,4,7,10])
- print response1
- print response2
- print response3
- [1, 2, 3, 4]
- [1, 3, 5, 7, 9]
- [1, 4, 7, 10]
可以看出结果是我们想要的顺序.
来源: http://www.bubuko.com/infodetail-2930823.html