Python 如何在有固定编号的列表中查找最大编号
假设我有一个列表,如:Python 如何在有固定编号的列表中查找最大编号,python,list,sorting,indexing,max,Python,List,Sorting,Indexing,Max,假设我有一个列表,如: my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58] 这里的最大值显然是58,但我不想只返回一个58,我想要一个包含所有索引的列表,这些索引都有这个最大值 基本上,我希望得到结果[5,10,11] 我知道,如果我想要最大数量,我可以做my_list.index(max(my_list)),但这只会给我第一个索引 有什么建议吗?此外,我想坚持使用一些简单的方法,如排序,最大值,最小值,等等。您可以通过
my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58]
这里的最大值显然是58,但我不想只返回一个58,我想要一个包含所有索引的列表,这些索引都有这个最大值
基本上,我希望得到结果[5,10,11]
我知道,如果我想要最大数量,我可以做my_list.index(max(my_list))
,但这只会给我第一个索引
有什么建议吗?此外,我想坚持使用一些简单的方法,如
排序
,最大值
,最小值
,等等。您可以通过以下方法确定最大值
:
然后使用和a获得索引:
以你为例,我明白了
maxval == 58
indices = [5, 10, 11]
根据Keyser的建议,您可以通过执行以下操作来避免对列表进行两次迭代(一次用于确定
maxval
,一次用于查找匹配的index
es):
maxval = None
for index, val in enumerate(my_list):
if maxval is None or val > maxval:
indices = [index]
maxval = val
elif val == maxval:
indices.append(index)
您可以通过以下方法确定
maxval
:
然后使用和a获得索引:
以你为例,我明白了
maxval == 58
indices = [5, 10, 11]
根据Keyser的建议,您可以通过执行以下操作来避免对列表进行两次迭代(一次用于确定
maxval
,一次用于查找匹配的index
es):
maxval = None
for index, val in enumerate(my_list):
if maxval is None or val > maxval:
indices = [index]
maxval = val
elif val == maxval:
indices.append(index)
我试着尽可能用最具蟒蛇式的方式
my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58]
max_indices = [i for i in range(len(my_list)) if my_list[i] == max(my_list)]
编辑: 阿什维尼是对的。max()需要在列表之外,所以
max_value = max(my_list)
max_indices = [i for i in range(len(my_list)) if my_list[i] == max_value]
我试着尽可能用最具蟒蛇式的方式
my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58]
max_indices = [i for i in range(len(my_list)) if my_list[i] == max(my_list)]
编辑: 阿什维尼是对的。max()需要在列表之外,所以
max_value = max(my_list)
max_indices = [i for i in range(len(my_list)) if my_list[i] == max_value]
Enumerate将帮助您获取值和位置
maxx = max(my_list)
for i,j in enumerate(my_list):
if j == maxx:
print i,j
输出
558
1058
11 58 Enumerate将帮助您获取值和位置
maxx = max(my_list)
for i,j in enumerate(my_list):
if j == maxx:
print i,j
输出
558
1058
11 58与枚举和列表理解类似,您也可以使用筛选器:
maxval = max(my_list)
indices = list(filter(lambda x: my_list[x]==maxval, list(range(len(my_list)))))
与枚举和列表理解类似,您还可以使用筛选器:
maxval = max(my_list)
indices = list(filter(lambda x: my_list[x]==maxval, list(range(len(my_list)))))
或者,用一些内存替换运行时,遍历列表一次,以某种方式跟踪到目前为止最大的索引。我没有任何蟒蛇的东西,很好。第二个示例中肯定存在+1个轻微但重要的错误:它需要将
索引
附加到索引
,而不是val
。。。此外,我认为所有的开销都不值得节省额外的迭代。对于短列表,列表理解版本的速度是elif
方法的两倍,而对于长列表,它的速度是4倍。如果列表中有负值,则失败@jonrsharpe@Achy97据我所知,它可以很好地处理负值。例如,如果我使用my_list=[12,13,51,21,-22,58,45.1,34.2,-56,6,58,58]
运行,我仍然会得到[5,10,11]
。不清楚您的具体问题是什么。或者,用一些内存替换运行时,遍历列表一次,并以某种方式跟踪到目前为止最大的索引。我没有任何蟒蛇的东西,很好。第二个示例中肯定存在+1个轻微但重要的错误:它需要将索引
附加到索引
,而不是val
。。。此外,我认为所有的开销都不值得节省额外的迭代。对于短列表,列表理解版本的速度是elif
方法的两倍,而对于长列表,它的速度是4倍。如果列表中有负值,则失败@jonrsharpe@Achy97据我所知,它可以很好地处理负值。例如,如果我使用my_list=[12,13,51,21,-22,58,45.1,34.2,-56,6,58,58]
运行,我仍然会得到[5,10,11]
。不清楚您的具体问题是什么。我认为enumerate比Index更像python。但它可能不是O(N^2),因为max()在列表中?是的:对max()
的每次调用都是O(N)
,并且你做了N次。@AshwiniChaudhary和Jornsharpe,python有那么愚蠢吗p我只是问,我们不应该认为它那么聪明@ᴋᴇʏsᴇʀ我们可以很容易地用任何我们想要的max
函数隐藏max
,因此Python无法优化这些东西。我认为enumerate比Index更像Python。但它可能不是O(N^2),因为max()在列表中?是的:对max()
的每次调用都是O(N)
,并且你做了N次。@AshwiniChaudhary和Jornsharpe,python有那么愚蠢吗p我只是问,我们不应该认为它那么聪明@ᴋᴇʏsᴇʀ我们可以很容易地用任何我们想要的max
函数隐藏max
,因此Python无法优化这些东西。请看,这是否回答了您的问题?这也回答了你的问题吗?