<p>您可以使用<code>zip</code>将列表配对,然后按用户分组,从每个组中选择一个最大值:</p>
<pre><code>>>> from itertools import groupby
>>> user_list = ['oshamir','oshamir','oshamir','ctmuser','ctmuser','root','root','root']
>>> num_list = ['400','700','600','300','500','1000','400','2000']
>>> [max(g, key=lambda x: int(x[1])) for _, g in groupby(zip(user_list, num_list), lambda x: x[0])]
[('oshamir', '700'), ('ctmuser', '500'), ('root', '2000')]
</code></pre>
<p>在上述<a href="https://docs.python.org/3/library/functions.html#zip" rel="nofollow noreferrer">^{<cd1>}</a>中,返回<code>(user, num)</code>元组的iterable:</p>
<pre><code>>>> pairs = list(zip(user_list, num_list))
>>> pairs
[('oshamir', '400'), ('oshamir', '700'), ('oshamir', '600'), ('ctmuser', '300'), ('ctmuser', '500'), ('root', '1000'), ('root', '400'), ('root', '2000')]
</code></pre>
<p>然后使用<a href="https://docs.python.org/3.6/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">^{<cd4>}</a>根据每个元组中的第一个项对项进行分组:</p>
<pre><code>>>> groups = [list(g) for _, g in groupby(pairs, lambda x: x[0])]
>>> groups
[[('oshamir', '400'), ('oshamir', '700'), ('oshamir', '600')], [('ctmuser', '300'), ('ctmuser', '500')], [('root', '1000'), ('root', '400'), ('root', '2000')]]
</code></pre>
<p>最后使用带有<code>key</code>函数的<a href="https://docs.python.org/3/library/functions.html#max" rel="nofollow noreferrer">^{<cd5>}</a>来挑选具有最大值的对。请注意,<code>num_list</code>上的项是字符串,因此需要将它们转换为数字,以便我们选择<code>'2000'</code>而不是<code>'400'</code>:</p>
<pre><code>>>> [max(g, key=lambda x: int(x[1])) for g in groups]
[('oshamir', '700'), ('ctmuser', '500'), ('root', '2000')]
</code></pre>