Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在有固定编号的列表中查找最大编号_Python_List_Sorting_Indexing_Max - Fatal编程技术网

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无法优化这些东西。请看,这是否回答了您的问题?这也回答了你的问题吗?