在Python元组中,顺序会被保留吗?
我有一个时间列表,想把它分成时间段。简单来说,就是把 [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)
有几个问题...
- 我能否相信在我这样创建的每一对 (tn-1, tn) 中,tn-1 一定小于 tn?(顺序会保持吗?)
- 用列表推导式复制原始的
mdtimes
列表,这样做算不算好习惯?如果不算,那应该怎么做呢? 我构建这些元组的目的是为了遍历它们,并用
tn-1
和tn
来划分一个数据集。这种方法合理吗?也就是说:datasegment = [x for x in bigdata if ( (x['datetime'] > tleft) and (x['datetime'] < tright))]
谢谢
7 个回答
6
你可以用 zip
来实现同样的效果:
>>> l = ["t0", "t1", "t2", "t3", "t4", "t5", "t6"]
>>> zip(l[::2], l[1::2])
[('t0', 't1'), ('t2', 't3'), ('t4', 't5')]
22
列表(list
)和元组(tuple
)都是有顺序的,也就是说它们里面的元素是按照一定的顺序排列的。
dtg0, dtg1 = itertools.tee(mdtimes)
next(dtg0)
dtsegs = zip(dtg0, dtg1)
22
元组的顺序是你插入值的顺序。它们不会像你想的那样被排序。
zip
也会保持你插入值的顺序。这是一种可以接受的方法,但我有两个其他建议:使用copy模块,或者使用
dtg1 = mdtimes[:]
。听起来很合理。