<p>使用<a href="https://docs.python.org/2/library/collections.html#collections.OrderedDict" rel="nofollow">^{<cd1>}</a>和<a href="https://docs.python.org/2/library/bisect.html#bisect.bisect_left" rel="nofollow">^{<cd2>}</a>有一种方法:</p>
<pre><code>from collections import OrderedDict
from bisect import bisect_left
from pprint import pprint
dct = OrderedDict()
for t, v in highhz:
dct.setdefault(t, []).append(v)
times = list(dct)
for t, v in lowhz:
ind = bisect_left(times, t) - 1
dct[times[ind]].append(v)
#
for k, v in dct.items():
if len(v) == 1:
v.append(float('nan'))
#
print [[k] + v for k, v in dct.items()]
#[[0, 1, 1.5], [2, 2, nan], [4, 4, nan], [5, 5, 5.6], [6, 6, nan], [7, 7, nan], [8, 8, nan]]
</code></pre>
<p>上面代码的一个稍加修改的版本,如果两次之间的项数大于1,则插入统一数量的<code>NaN</code>:</p>
<pre><code>highhz = [(0, 1), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8)]
lowhz = [(1.5, 1.5), (2, 2), (5.6, 5.6), (5.7, 10), (5.8, 20)]
#
max_n = len(max(dct.values(), key=len))
for k, v in dct.items():
le = len(v)
v.extend([float('nan')]*(max_n-le))
#
pprint([[k] + v for k, v in dct.items()])
[[0, 1, 1.5, 2, nan],
[3, 3, nan, nan, nan],
[4, 4, nan, nan, nan],
[5, 5, 5.6, 10, 20],
[6, 6, nan, nan, nan],
[7, 7, nan, nan, nan],
[8, 8, nan, nan, nan]]
</code></pre>