擅长:python、mysql、java
<p>所以沿着最初的,可能是最明显的解决方案(algo1),我写了第二个解决方案(algo2):</p>
<ul>
<li>从dict创建元组列表</li>
<li>命令它(从而将比较减少到只有2个)。你知道吗</li>
<li>切片(从而将比较从n^2减少到(n^2+n)/2->;<em>n越大,优势越大</em>)</li>
<li>在同一个循环中弹出。你知道吗</li>
</ul>
<hr/>
<pre><code>def algo1(a_dict):
to_remove = []
for ilcs, iloads in a_dict.items():
for jlcs, jloads in a_dict.items():
if iloads[0] > jloads[0] and iloads[1] > jloads[1] and abs(iloads[2]) < abs(jloads[2]):
# print(iloads, jloads)
to_remove.append(ilcs)
break
for i in to_remove:
a_dict.pop(i)
return a_dict
def algo2(a_dict):
ordered_list_view = sorted(a_dict.items(), key=lambda t: abs(t[1][2]))
for i, ikv in enumerate(ordered_list_view):
forward_slice = ordered_list_view[i:]
for j, jkv in enumerate(forward_slice):
if all(ikv[1][j] > jkv[1][j] for j in range(2)):
print(ikv[1], jkv[1])
a_dict.pop(ikv[0])
break
return a_dict
</code></pre>
<p>我也给它们计时,但令我惊讶的是,algo1速度更快。有点,但还是。。你知道吗</p>