Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在线计算时间范围内的覆盖时间_Python_Python 3.x - Fatal编程技术网

Python 在线计算时间范围内的覆盖时间

Python 在线计算时间范围内的覆盖时间,python,python-3.x,Python,Python 3.x,假设我有一个时间范围,它可以由视频表示为开始时间(0秒)和结束时间。例如,对于一个持续1分钟的视频,我的时间范围是0到60秒 假设我有一个在线流,它向我发送这样的时间间隔: [0, 10] [8, 14] [2, 3] [20, 25] [0, 10] #time_played = 10s [8, 14] #time_played = 14s because [0,10]+[8,14] -> [0,14] is the effective time interval [2, 3] #ti

假设我有一个时间范围,它可以由视频表示为开始时间(0秒)和结束时间。例如,对于一个持续1分钟的视频,我的时间范围是0到60秒

假设我有一个在线流,它向我发送这样的时间间隔:

[0, 10]
[8, 14]
[2, 3]
[20, 25]
[0, 10]
#time_played = 10s
[8, 14]
#time_played = 14s because [0,10]+[8,14] -> [0,14] is the effective time interval
[2, 3]
#time_played = 14s because this time interval has already been covered
[20, 25]
#time_played = 19s because [0, 14] + [20, 25] makes 19s the video was effectively played
假设这些间隔表示播放视频所经过的时间。我想计算一下,每次新的时间间隔到来时,视频播放的有效时间没有重复

应该是这样的:

[0, 10]
[8, 14]
[2, 3]
[20, 25]
[0, 10]
#time_played = 10s
[8, 14]
#time_played = 14s because [0,10]+[8,14] -> [0,14] is the effective time interval
[2, 3]
#time_played = 14s because this time interval has already been covered
[20, 25]
#time_played = 19s because [0, 14] + [20, 25] makes 19s the video was effectively played

我无法找到解决方案,因为我不知道问题的定义是什么。您认为使用
python

解决此问题的聪明方法是什么?您可以将经过的所有时间附加到数组中,然后像这样获得数组的长度

times = []
def get_time(interval = None): # If we don't pass the interval it will return the current time passed
    if interval:
        for time in range(interval[0], interval[1]):
            if time not in times: # Don't append to the array if we already have the time value
                times.append(time)
    return len(times) # Return the length of the array of times


print(get_time([0, 10]))
#time_played = 10s
print(get_time([8, 14]))
#time_played = 14s because [0,10]+[8,14] -> [0,14] is the effective time interval
print(get_time([2, 3]))
#time_played = 14s because this time interval has already been covered
print(get_time([20, 25]))
#time_played = 19s because [0, 14] + [20, 25] makes 19s the video was effectively played

## Expected output:
## 10
## 14
## 14
## 19
希望这有帮助这是我的新答案。 get time函数执行以下几项操作: 1,计算时间-函数创建一个名为
times
的本地列表,并将时间值附加到该列表中(如前一个答案所示,但这次我们使用一个本地列表,因此它不会占用内存),将所有
前一个\u间隔
和传递给函数的间隔分解。然后将播放时间保存到名为
time\u played
的变量中。这是稍后将返回的内容。 2、计算
previous\u interval
-如果次数大于0,则清除
previous\u interval
变量(为了避免
pop(0)
引发
索引器,否则
previous\u interval
仍然为空)程序将对时间进行排序,并找出创建时间列表所需的所有间隔。然后,它将保存到
previous\u interval
,以便下次运行该功能 3,returning-程序返回我们先前创建的
时间变量。它不会返回
len(times)
,因为我们弹出了一个项目,这在大多数情况下都是错误的;但是,如果没有经过秒(即,经过的间隔是
[0,0]
),则不会出错,因此我们也不能返回
len(times)+1

特别感谢Diarmuid O'Briain,他为我提供了答案,帮助我编写了上一次的间隔计算

previous_interval=[]
def get_时间(*间隔):
全局前向间隔
时间=[]
间隔=列表(间隔)+以前的间隔
对于间隔中的间隔:
对于范围内的时间(间隔[0],间隔[1]):
如果时间不是时间:
times.append(时间)
播放时间=len(次)
以前的_间隔=[]
如果len(次)>0:
times.sort()
lastTime=times.pop(0)
重要时间间隔=[上次]
以时间为单位:
如果有时间!=上次时间+1:
重要的\u间隔。追加(lastTime+1)
重要间隔。追加(时间)
最后时间
重要的\u间隔。追加(lastTime+1)
while(重要间隔):
开始时间=重要间隔。pop(0)
结束时间=重要间隔。pop(0)
上一个\u间隔。追加([开始\u时间,结束\u时间])
返回时间
打印(获取时间([0,0]))
#time_play=0s,而不是1s,如果我们返回len(times)并更正缺失的值,就会出现这种情况
打印(获取时间([0,0],[1,1]))
#时间=0s,我们现在可以通过多个间隔。([0,0]=没有经过时间+[1,1]=没有经过时间,所以即使这看起来很奇怪,它也是完全正确的)
打印(获取时间([0,10]))
#播放时间=10秒
打印(获取时间([8,14]))
#播放时间=14s,因为[0,10]+[8,14]->[0,14]是有效时间间隔
打印(获取时间([2,3]))
#播放时间=14秒,因为此时间间隔已被覆盖
打印(获取时间([20,25]))
#播放时间=19s,因为[0,14]+[20,25]使视频有效播放19s
##预期产出:
## 0
## 0
## 10
## 14
## 14
## 19

希望这是有帮助的谢谢,这个解决方案解决了问题。尽管如此,需要承认的是,这个解决方案占用内存,因为您需要存储所有的时间瞬间,而我认为您只能存储极值。我投了赞成票,但我在等待一个惊人的、超聪明的解决方案:DI发布了一个新的答案,我认为应该解决内存问题。我把它作为新的,而不是编辑这一个,因为这一个可能是一个初学者更容易理解的事实,所以如果有人有类似的问题,他们可以更好地了解如何工作