J'ai une liste de datetime à partir de laquelle je veux construire des segments de temps. En d'autres termes, tournez [t0, t1, ... tn]
en [(t0,t1),(t1,t2),...,(tn-1, tn)]
. Je l'ai fait de cette façon:Puis-je compter sur l'ordre d'être conservé dans un tuple Python?
# start by sorting list of datetimes
mdtimes.sort()
# construct tuples which represent possible start and end dates
# left edges
dtg0 = [x for x in mdtimes]
dtg0.pop()
# right edges
dtg1 = [x for x in mdtimes]
dtg1.reverse()
dtg1.pop()
dtg1.sort()
dtsegs = zip(dtg0,dtg1)
Questions ...
- Puis-je compter sur tn-1 < tn pour tout (tn-1, tn) après que je l'ai créé eux cette façon? (La commande est-elle conservée?)
- Est-ce une bonne pratique de copier la liste originale
mdtimes
avec les listes de compréhension? Sinon, comment devrait-il être fait? Le but de la construction de ces tuples est de les parcourir et de segmenter un ensemble de données avec
tn-1
ettn
. Est-ce une approche raisonnable? à savoirdatasegment = [x for x in bigdata if ((x['datetime'] > tleft) and (x['datetime'] < tright))]
Merci
btw: '(x ['datetime']> tleft) et (x ['datetime']
La question que vous n'avez pas faite t ask: Étant donné que 'x' est trié, est' x.reverse(); x.pop(); x.sort() 'une bonne idée? Réponse: ** NON **; c'est horrible; 'x.pop (0)' fera la même chose, et dans tous les cas, il vaut mieux utiliser n'importe laquelle des réponses que d'utiliser la méthode 'pop()'. –
J'ai fini par aller avec 'dtsegs = zip (mdtimes [:], mdtimes [1:])' – Pete