【发布时间】:2014-08-17 03:50:53
【问题描述】:
所以我有两个数据列表,看起来像这样(缩短):
[[1.0, 1403603100],
[0.0, 1403603400],
[2.0, 1403603700],
[0.0, 1403604000],
[None, 1403604300]]
[1.0, 1403603100],
[0.0, 1403603400],
[1.0, 1403603700],
[None, 1403604000],
[5.0, 1403604300]]
我想要做的是合并它们,将每个数据集的第一个元素相加,或者如果任一计数器值为无,则将其设为 0.0。所以上面的例子会变成这样:
[[2.0, 1403603100],
[0.0, 1403603400],
[3.0, 1403603700],
[0.0, 1403604000],
[0.0, 1403604300]]
这是我目前为止的想法,如果有点笨拙,请见谅。
def emit_datum(datapoints):
for datum in datapoints:
yield datum
def merge_data(data_set1, data_set2):
assert len(data_set1) == len(data_set2)
data_length = len(data_set1)
data_gen1 = emit_datum(data_set1)
data_gen2 = emit_datum(data_set2)
merged_data = []
for _ in range(data_length):
datum1 = data_gen1.next()
datum2 = data_gen2.next()
if datum1[0] is None or datum2[0] is None:
merged_data.append([0.0, datum1[1]])
continue
count = datum1[0] + datum2[0]
merged_data.append([count, datum1[1]])
return merged_data
我只能希望/假设我可以用 itertools 或集合做一些狡猾的事情?
【问题讨论】:
-
你可以分别发布两个数据集以便轻松复制和粘贴它们
-
使用
iter而不是emit_datum -
让复制/粘贴数据变得更容易
-
在您的示例中,右侧的列始终处于相同的顺序,我们可以假设这是真的吗?
-
是的,它们实际上是时间戳。