我有一个清单:
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
最大元素是55(两个元素在位置9和12)
我需要找到在哪个位置(s)的最大值是位于。请帮助。
我有一个清单:
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
最大元素是55(两个元素在位置9和12)
我需要找到在哪个位置(s)的最大值是位于。请帮助。
当前回答
@shash在其他地方回答了这个问题
找到最大列表元素的索引的python方法是 Position = max(enumerate(a), key=lambda x: x[1])[0]
一个通过。然而,它比@Silent_Ghost的解决方案慢,甚至比@nmichaels的解决方案更慢:
for i in s m j n; do echo $i; python -mtimeit -s"import maxelements as me" "me.maxelements_${i}(me.a)"; done
s
100000 loops, best of 3: 3.13 usec per loop
m
100000 loops, best of 3: 4.99 usec per loop
j
100000 loops, best of 3: 3.71 usec per loop
n
1000000 loops, best of 3: 1.31 usec per loop
其他回答
选择的答案(和大多数其他答案)需要至少两次遍历列表。 这里有一个一次性的解决方案,对于较长的列表可能是一个更好的选择。
编辑:解决@John Machin指出的两个不足之处。对于(2),我尝试基于每个条件发生的猜测概率和前人允许的推论来优化测试。为max_val和max_indexes确定正确的初始化值有点棘手,这适用于所有可能的情况,特别是如果max恰好是列表中的第一个值-但我相信它现在做到了。
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
如果你想获取一个名为data的列表中最大n个数字的索引,你可以使用Pandas sort_values:
pd.Series(data).sort_values(ascending=False).index[0:n]
还有一个解决方案,只给出第一个外观,可以通过使用numpy实现:
>>> import numpy as np
>>> a_np = np.array(a)
>>> np.argmax(a_np)
9
这里有一个简单的单步解决方案。
import math
nums = [32, 37, 28, 30, 37, 25, 55, 27, 24, 35, 55, 23, 31]
max_val = -math.inf
res = []
for i, val in enumerate(nums):
if(max_val < val):
max_val = val
res = [i]
elif(max_val == val):
res.append(i)
print(res)
a.index(max(a))
会告诉你列表a中值最大的元素的第一个实例的索引。