Python:如何检查值是否位于两个列表的多个索引之间?
我正在用cv2逐帧分析一个视频,如果帧号在某些时间戳之间,我想将帧保存为1,如果不在,则保存为0。 我有两个列表,一个是开始时间,一个是结束时间:Python:如何检查值是否位于两个列表的多个索引之间?,python,for-loop,list-comparison,Python,For Loop,List Comparison,我正在用cv2逐帧分析一个视频,如果帧号在某些时间戳之间,我想将帧保存为1,如果不在,则保存为0。 我有两个列表,一个是开始时间,一个是结束时间: start_times = [0, 10, 15] end_times = [2, 12, 17] 我想将帧编号0,1,2和10,11,12和15,16,17的帧保存为1,将其他帧保存为0 我的代码将正确的帧保存为1,但将不需要的帧保存为0,因为我使用的是for循环。请参见下面的简化示例: start_times = [0,10,15] end_t
start_times = [0, 10, 15]
end_times = [2, 12, 17]
我想将帧编号0,1,2和10,11,12和15,16,17的帧保存为1,将其他帧保存为0
我的代码将正确的帧保存为1,但将不需要的帧保存为0,因为我使用的是for循环。请参见下面的简化示例:
start_times = [0,10,15]
end_times = [2,12,17]
currentframe = 0
while True:
try:
for index,time in enumerate(start_times):
if start_times[index] <= currentframe <= end_times[index]:
print('save images as 1')
else:
print('save images as 0')
currentframe += 1
if currentframe == 20:
break
except IndexError:
break
如何更改代码,使第一帧仅保存为1?我想这就是您要查找的内容
while curr_frame < 20:
is_in = any(filter(lambda start_end: start_end[0] <= curr_frame <= start_end[1],
zip(start_times, end_times))))
print(f'Save image as {int(is_in)}')
curr_frame += is_in
当前帧<20时的:
is_in=any(filter)(lambda start_end:start_end[0])我不确定我是否清楚地理解了您的意思,但请尝试一下并告诉我这是否是您想要的:
start_times = [0,10,15]
end_times = [2,12,17]
times = sorted(start_times + end_times)
print(times)
i = 0
while i + 1 < len(times):
k = times[i]
while k <= times[i + 1]:
if i % 2 == 0:
print('save [frame {}] as 1'.format(k))
else:
print('save [frame {}] as 0'.format(k))
k += 1
i += 1
开始时间=[0,10,15]
结束时间=[2,12,17]
时间=排序(开始时间+结束时间)
印刷(次)
i=0
而i+1 而k我的一位朋友通过使用范围为我提供了解决方案:
current_frame = 0
start_times = [0, 10, 15]
end_times = [2, 12, 17]
ranges = [range(start, stop) for start, stop in zip(start_times, end_times)]
while True:
if any([current_frame in my_range for my_range in ranges]):
print('save image as 1')
else:
print('save image as 0')
...
你想知道你总共得到了多少个1吗?@VIVID不,如果当前帧位于两个列表相同索引的值之间,我想保存它(因此在本例中介于0和2、10和12、15和17之间)。我添加保存部分并不是为了让示例更清楚。@Danielvandencorp我很高兴它有帮助!
current_frame = 0
start_times = [0, 10, 15]
end_times = [2, 12, 17]
ranges = [range(start, stop) for start, stop in zip(start_times, end_times)]
while True:
if any([current_frame in my_range for my_range in ranges]):
print('save image as 1')
else:
print('save image as 0')
...