【问题标题】:Find maximum value and index in a python list?在 python 列表中查找最大值和索引?
【发布时间】:2016-09-28 13:26:26
【问题描述】:

我有一个这样的python列表,

[[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]]

这个列表最多可以有上千个元素,如何根据子数组中的第二项获取列表中的最大值,并得到最大值的索引,即第一个元素python中的子数组?

【问题讨论】:

  • 你是对的@unwind。我认为他想根据第二个元素找到所有具有最大值的元素,并根据第一个值找到它们中的最大值。
  • 对不起,如果你们没有得到它,就像这样我想要具有最大第二个值的子数组,第二个值表示子数组中的第[1]项
  • 好吧……我还是很难理解。一个小例子,例如一个四五个元素的列表会很有帮助。但我想它已经解决了。
  • @rksh 如果多个子数组获得了最大秒值怎么办?

标签: python list max


【解决方案1】:

使用max 函数及其key 参数,仅使用第二个元素来比较列表中的元素。

例如,

>>> data = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968].... [12588042, 0.9473684210
526315]]
>>> max(data, key=lambda item: item[1])
[12588042, 0.9473684210526315]

现在,如果你只想要第一个元素,那么你可以简单地单独获取第一个元素,或者只是解包结果,就像这样

>>> index, value = max(data, key=lambda item: item[1])
>>> index
12588042
>>> value
0.9473684210526315

编辑:如果你想在所有具有最大值(第二个值)的元素中找到最大索引(第一个值),那么你可以这样做

>>> _, max_value = max(data, key=lambda item: item[1])
>>> max(index for index, value in data if value == max_value)

你可以在一次迭代中做同样的事情,像这样

max_index = float("-inf")
max_value = float("-inf")

for index, value in data:
      if value > max_value:
          max_value = value
          max_index = index
      elif value == max_value:
          max_index = max(max_index, index)

【讨论】:

  • 谢谢,实际上我想要的是像你在原始答案中提到的那样,子数组中具有最大第二个值的子数组:) 有没有办法获得 n 个数组的最大值值,例如前 10 个最高值 :)
  • @rksh 你应该给出适当的例子。这些词简直令人困惑。
  • 好的,如果有这样的数组data = [1,2,5,7,6,8,3,9,4],我将举一个简单的例子,我怎样才能得到三个最大值?在这种情况下,它是7,8,9
  • @rksh 对它们进行排序并切片结果列表。
【解决方案2】:

max 与键一起使用。

l = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]]
max_sub = max(l, key=lambda x: x[1])
max_val = max_sub[1]
max_index = max_sub[0]

【讨论】:

    【解决方案3】:
    from operator import itemgetter
    
    a = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]]
    
    max(a, key=itemgetter(1))[0]
    // => 12588042
    

    【讨论】:

      【解决方案4】:
      allData = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]]
      
      listOfSecondData = [i[1] for i in allData]
      result = allData[listOfSecondData.index(max(listOfSecondData))][0]
      
      print(result)
      #Output: 12588042
      

      【讨论】:

        【解决方案5】:

        简单

        list = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]]
        list2 = []
        
        for x in list:
            list2.append(x[1])
        print "index->" + str(list[list2.index(max(list2))][0])
        print "max value->" + str(list[list2.index(max(list2))][1])
        

        【讨论】:

          猜你喜欢
          • 2012-07-16
          • 1970-01-01
          • 2020-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-20
          • 2013-06-01
          相关资源
          最近更新 更多