擅长:python、mysql、java
<p>你可以用<code>collections.defaultdict</code>来表示一个O(n)解。你知道吗</p>
<p>在Python3.7中,您将获得额外的好处,即值的顺序将与输入中的顺序相匹配。这在python3.6中可以工作,但被认为是一个实现细节。你知道吗</p>
<pre><code>from collections import defaultdict
d = defaultdict(list)
for item in tideData:
d[item[0]].append(item)
res = list(d.values())
</code></pre>
<p>结果:</p>
<pre><code>[[['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73]],
[['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]],
[['Saturday 6 January', 0.5, 0.02], ['Saturday 6 January', 7.18, 0.85]],
[['Friday 2 February', 23.52, 0.04]]]
</code></pre>
<p>对于那些对O(n)和O(n logn)解决方案之间的性能差异感兴趣的人:</p>
<pre><code>from collections import defaultdict
from itertools import groupby
tideData = tideData * 10000
def jp(tideData):
d = defaultdict(list)
for item in tideData:
d[item[0]].append(item)
return list(d.values())
def grp(tideData):
return [list(g) for _,g in groupby(tideData, key=lambda x: x[0])]
%timeit jp(tideData) # 12.2 ms per loop
%timeit grp(tideData) # 33.1 ms per loop
</code></pre>