查找给定元组列表的时间间隔

Gio*_*ldi 2 python tuples list

我有以下Python元组列表:

a  = [(1,2,'MARCO'),(3,4,'MARCO'),(5,6,'MARCO'),(7,8,'MARCO'),(9,11,'CARLO'),(12,13,'CARLO'),(14,15,'CARLO'),(16,17,'MARCO'),(18,19,'MARCO'),(20,21,'MARCO'),(22,23,'MARCO')]
Run Code Online (Sandbox Code Playgroud)

在每个元组中,第一个元素是开始时间,第二个元素是结束时间,第三个元素是该段中的活动者.使用相同的扬声器对连续间隔进行分组并具有总初始时间和总最终时间的有效方法是什么?

更具体地说,我想要获得的输出类似于以下内容:

b = [(1,8,'MARCO'),(9,15,'CARLO'),(16,23,'MARCO')]
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 6

这个itertools模块有点手工制作的乐趣怎么样?这假设您的列表是通过上升"时间"开始排序的.

from itertools import groupby
def speaker_times(a):
    result = []
    for item in groupby(a, lambda x:x[2]):  # Group by speaker name
        values = list(item[1])              # Convert iterator to list
        result.append((min(values)[0], max(values)[1], item[0]))
    return result
Run Code Online (Sandbox Code Playgroud)

结果:

In [12]: speaker_times(a)
Out[12]: [(1, 8, 'MARCO'), (9, 15, 'CARLO'), (16, 23, 'MARCO')]
Run Code Online (Sandbox Code Playgroud)