我有以下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')]
在每个元组中,第一个元素是开始时间,第二个元素是结束时间,第三个元素是该段中的活动者。 什么是使用相同的发言者对连续的时间间隔进行分组并具有总的初始时间和总的最终时间的有效方法?
更具体地说,我想获得的输出类似于以下内容:
b = [(1,8,'MARCO'),(9,15,'CARLO'),(16,23,'MARCO')]
答案 0 :(得分:6)
itertools
module有点手工制作的乐趣怎么样?这假定您的列表是通过上升开始"次"来订购的。
$(function(){
var vm = {
multiSelectConfig: { /* config here */ },
_categories: [{_id: 1, _name: "test"},
selectedCategory: ko.observable()
};
ko.applyBindings(vm);
});
结果:
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