我可以指望在Python元组中保存顺序吗?

Pet*_*ete 25 python tuples list

我有一个日期时间列表,我想从中构建时间段.换句话说,[t0, t1, ... tn]变成[(t0,t1),(t1,t2),...,(tn-1, tn)].我这样做了:

# 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)
Run Code Online (Sandbox Code Playgroud)

问题...

  1. 在我以这种方式创建它们之后,我可以依靠tn-1 <tn表示任何(tn-1,tn)吗?(订购保存吗?)
  2. mdtimes使用列表推导复制原始列表是一种好习惯吗?如果不是应该怎么做?
  3. 构建这些元组的目的是为了在它们之间迭代和段使用的数据集tn-1tn.这是一种合理的方法吗?即

    datasegment = [x for x in bigdata if ( (x['datetime'] > tleft) and (x['datetime'] < tright))] 
    
    Run Code Online (Sandbox Code Playgroud)

谢谢

Ign*_*ams 18

这两个listtuple是有序的.

dtg0, dtg1 = itertools.tee(mdtimes)
next(dtg0)
dtsegs = zip(dtg0, dtg1)
Run Code Online (Sandbox Code Playgroud)


mar*_*cog 17

  1. 元组顺序是在元组中插入值时.我认为你不会按照我的要求对它们进行分类.zip将再次保留您插入值的顺序.

  2. 这是一种可接受的方法,但我有2个备用建议:使用复制模块,或使用dtg1 = mdtimes[:].

  3. 听起来很合理.


Paw*_*ski 6

您可以实现相同的目标zip:

>>> l = ["t0", "t1", "t2", "t3", "t4", "t5", "t6"]
>>> zip(l[::2], l[1::2])
[('t0', 't1'), ('t2', 't3'), ('t4', 't5')]
Run Code Online (Sandbox Code Playgroud)