擅长:python、mysql、java
<p>如果您想要排序的输出(特别是如果您已经有了排序的输入)<a href="https://docs.python.org/3/library/itertools.html#itertools.groupby" rel="nofollow">^{<cd1>}</a>和<a href="https://docs.python.org/3/library/heapq.html#heapq.merge" rel="nofollow">^{<cd2>}</a>很好地结合在一起。如果输入尚未排序,则需要这样做。一次串联和排序:</p>
<pre><code>from operator import itemgetter
commonkey = itemgetter(0, 1, 2)
combined = sorted(list1 + list2, key=commonkey)
</code></pre>
<p>或者如果它们已经被排序,或者您想独立排序,您可以使用<code>heapq.merge</code>并避免对输入进行浅表复制:</p>
<pre><code># Explicit sort calls only necessary if inputs not already sorted
list1.sort(key=commonkey)
list2.sort(key=commonkey)
# Combine already sorted inputs with heapq.merge, avoiding intermediate lists
combined = heapq.merge(list1, list2, key=commonkey)
</code></pre>
<p>无论您选择哪种方法,您都可以通过对<code>groupby</code>的简单理解来继续操作,只需获取每个唯一组中的第一个条目,就可以只保留每个唯一键的一个副本:</p>
<pre><code># Groups neighboring entries with the same key, and we keep only the first one
uniq = [next(g) for _, g in itertools.groupby(combined, key=commonkey)]
</code></pre>