擅长:python、mysql、java
<p>所选答案(以及大多数其他答案)至少需要两次通过列表。<br/>
这里有一个单程解决方案,对于较长的列表可能是更好的选择。</p>
<p><strong>编辑:</strong>以解决@John Machin指出的两个缺陷。对于(2)我试图根据每个条件的猜测发生概率和前人允许的推论来优化测试。找出<code>max_val</code>和<code>max_indices</code>的正确初始化值有点困难,这适用于所有可能的情况,特别是如果max恰好是列表中的第一个值,但我相信现在是这样。</p>
<pre><code>def maxelements(seq):
''' Return list of position(s) of largest element '''
max_indices = []
if seq:
max_val = seq[0]
for i,val in ((i,val) for i,val in enumerate(seq) if val >= max_val):
if val == max_val:
max_indices.append(i)
else:
max_val = val
max_indices = [i]
return max_indices
</code></pre>