如何在对象列表中查找连续/连续对象

时间:2016-09-01 14:59:38

标签: python

我有一个对象列表,其中包含属性序列号(SN)和日期时间以及其他属性。根据列表的生成方式,对象应按时间顺序排列。 按时间顺序,对象可以具有以下SN:

1,1,1,1,1,2,2,2,3,3,3,3,3,3,2,2,1,2,2,2,2,3,3,1 ,1,1,3-,...

如何检索SN的所有连续序列的最后一个时间戳。例如,对于SN = 1,它将是第一个到第f个时间戳以及第17和第24到第26个。 对于对象列表中出现的所有SN也是如此。 我想要的是一个Gantt like Diagram来显示这些SN存在的时间。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,也许你正在寻找这样的东西?

def consecutive(nums, sn):
    count = {nums[0]: [[0]]}
    for idx, num in enumerate(nums[1:]):
        if num == nums[idx]:
            try:
                count[num][-1][1] = idx + 1
            except IndexError:
                count[num][-1].append(idx + 1)
        else:
            try:
                count[nums[idx]][-1][1] = idx + 1
            except IndexError:
                count[nums[idx]][-1].append(idx + 1)
            try:
                count[num].append([idx + 1])
            except KeyError:
                count[num] = [[idx + 1]]
    return count[sn]

试验:

test = [1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 1, 2, 2, 2, 2, 3, 3, 1, 1, 1, 3]
print consecutive(test, 3) # will return [[8, 14], [21, 23], [26]], which are the index ranges for SN = 3