Avoiding TypeError when using timedelta to compare times
Question: I have a nested list containing times and some corresponding information, and
am trying to extract one line from the start of a block of times that follow
on from each other by a second (e.g. 10:04:23,10:04:24,10:04:25..). There
should be a lot of these little blocks. I'm not sure if what I have is on the
right lines, and if it is, it raises a TypeError and I'm not sure how to get
around it.

This is data relating to visits of animals to an area, and recordings are
taken every second. My aim is to have only one recording per visit, hence the
first line from a block of following-on times.

previous_and_next is stolen from
[here](http://stackoverflow.com/questions/1011938/python-previous-and-next-
values-inside-a-loop)

    
    
        data=[['07/11/2012', '09:53:36', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:36'],
     ['05/13/2012', '09:54:27', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:27'] etc]
    
    
    
           #define a function to get previous and following values
    from itertools import tee, islice, chain
        def previous_and_next(some_iterable):
            prevs, items, nexts = tee(some_iterable, 3)
            prevs = chain([None], prevs)
            nexts = chain(islice(nexts, 1, None), [None])
            return zip(prevs, items, nexts)
    
    
        #convert times to datetime objects
        for d in data:
            try:
                f=datetime.datetime.strptime(d[1],'%H:%M:%S')
                g=f.strftime('%H:%M:%S')
                d.append(g)
            except:
                pass
    
        new_list=[]
        for prev,item,next in previous_and_next(data):
            aftersecond=item[1]+datetime.timedelta(seconds=1)
            if next[1]==aftersecond: #if next time is this time plus a second
                this=True
            else:
                this==False
            while this==True:
                continue
            else:
                new_list.append(data)                  
    

aftersecond is raising `TypeError: Can't convert 'datetime.timedelta' object
to str implicitly`, which I understand, but don't understand how to avoid. I'm
not even certain this code does what I want it to do.

Thank you for your help!


Answer: I am suggesting this solution which seems simpler but may be too simple:

    
    
    import datetime
    
    from pprint import pprint
    
    data=[['07/11/2012', '09:53:36', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:36'],
          ['07/11/2012', '09:53:37', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:37'],
          ['07/11/2012', '09:53:38', 'U', '#0F', '0006E7895B', 'T', 'U\n', '09:53:38'],
          ['05/13/2012', '09:54:27', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:27'],
          ['05/13/2012', '09:54:28', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:28'],
          ['05/13/2012', '09:54:29', 'U', '#0F', '0006E3DADA', 'T', 'U\n', '5031', '09:54:29']]
    
    #convert times to datetime objects
    for d in data:
        dt = ' '.join( d[0:2] )
        dt = datetime.datetime.strptime(dt,'%m/%d/%Y %H:%M:%S')
        d.append( dt )
    
    newdata = [ data[0] ]
    latest_time = newdata[-1][-1]
    for d in data[1:]:
        delta = d[-1] - latest_time
        latest_time = d[-1]
        if delta != datetime.timedelta(0, 1):
            newdata.append( d )
    
    pprint(newdata)
    

With this dummy data, assuming that there are two animal visits with three
observations each, the result will be:

    
    
    [['07/11/2012',
      '09:53:36',
      'U',
      '#0F',
      '0006E7895B',
      'T',
      'U\n',
      '09:53:36',
      datetime.datetime(2012, 7, 11, 9, 53, 36)],
     ['05/13/2012',
      '09:54:27',
      'U',
      '#0F',
      '0006E3DADA',
      'T',
      'U\n',
      '5031',
      '09:54:27',
      datetime.datetime(2012, 5, 13, 9, 54, 27)]]
    

