我有一个对象列表,其中包含属性序列号(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存在的时间。
答案 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