Python 从包含列表的列表中获取最大值?

Python 从包含列表的列表中获取最大值?,python,list,function,python-2.7,max,Python,List,Function,Python 2.7,Max,所以我有一个列表,它包含几个列表,所有列表都有三个字符串,然后是一个浮点数,比如: resultlist = [["1", "1", "a", 8.3931], ["1", "2", "b", 6.3231], ["2", "1", "c", 9.1931]] 如何生成一个返回最大值的函数(这里是9.1931)?我试过了 def MaxValue(): max_value = max(resultlist) return max_value 但这只是给了我一个清单 编辑:还有

所以我有一个列表,它包含几个列表,所有列表都有三个字符串,然后是一个浮点数,比如:

resultlist = [["1", "1", "a", 8.3931], ["1", "2", "b", 6.3231], ["2", "1", "c", 9.1931]]
如何生成一个返回最大值的函数(这里是9.1931)?我试过了

def MaxValue():
    max_value = max(resultlist)
    return max_value
但这只是给了我一个清单


编辑:还有,我能从哪里得到值的索引吗?比如,从哪个子列表?

您是否只想从浮动(列表中的最后一个索引)中获取最大数?如果是这样,这里有一个解决方案

last_indices = [x[3] for x in resultlist]
return max(last_indices)

循环浏览外部列表并选择每个子列表的最后一个元素:

def max_value(inputlist):
    return max([sublist[-1] for sublist in inputlist])

print max_value(resultlist)
# 9.1931
最好将所有函数相关变量都保留在作用域中(将列表作为参数传递,不要通过重用变量名混淆名称空间)

输出:

9.1931

也许以一种比肾盂更实用的方式:

>>> max(map(lambda x: x[3], resultlist))
9.1931
它首先将结果列表的每个元素映射到数值,然后找到最大值

中间数组是:

>>> map(lambda x: x[3], resultlist)
[8.3931000000000004, 6.3231000000000002, 9.1930999999999994]

如果您也需要索引,可以使用
枚举
运算符。itemgetter
使用
映射

from operator import itemgetter
def max_val(l, i):
    return max(enumerate(map(itemgetter(i), l)),key=itemgetter(1)))
它将返回带有索引的最大值的元组:

In [7]: resultlist = [["1", "1", "a", 8.3931], ["1", "2", "b", 6.3231], ["2", "1", "c", 9.1931]]

In [8]: max_val(resultlist, -1)
Out[8]: (2, 9.1931)
或者只是一个普通的gen exp:

from operator import itemgetter
def max_val(l, i):
    return max(enumerate(sub[i] for sub in l), key=itemgetter(1))

以下是一个答案,以防您得到一个列表,其中编号并不总是位于第三位:

from itertools import chain
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist)))
from itertools import chain
import operator
myList = [[23, '34', 'a'],['b', 1000],['t', 'xyz', 100]]
l=filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(myList))
max(enumerate(l), key = operator.itemgetter(1))
#prints (1, 1000)
发生了什么事
itertools.chain
展平列表,然后
过滤器
选择所有数值,然后使用
max
函数确定最大值。 这里的优点是,它也适用于任意列表,其中数值可以在列表中的任何位置找到

例如:

resultlist = [['1', '1', 'a', 8.3931], ['1', '2', 'b', 6.3231], ['2', '1', 'c', 9.1931]]
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist))) 
#prints 9.1931
还有一个一般性的例子:

myList = [[23, 34, 'a'],['b'],['t', 100]]
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(myList)))
#prints 100
编辑:

如果还希望获得最大值的索引,可以执行以下操作(使用@Padraic Cunningham方法):

这种方法假设每个列表只有一个数值

使用数值位于任意位置的列表的另一个示例:

from itertools import chain
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist)))
from itertools import chain
import operator
myList = [[23, '34', 'a'],['b', 1000],['t', 'xyz', 100]]
l=filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(myList))
max(enumerate(l), key = operator.itemgetter(1))
#prints (1, 1000)

Numpy有助于处理数字嵌套列表。试试这个:

resultlist = [[3, 2, 4, 4], [1, 6, 7, -6], [5, 4, 3, 2]]
max(resultlist)  # yields [5, 4, 3, 2] because 5 is the max in: 3, 1, 5
np.max(resultlist)  # yields 7 because it's the absolute max

max()
返回所有列表第一个元素中最大的第一个元素,而
np.max()
返回所有嵌套列表中的最大值。

如其他人所述,您可以用更一般的术语回答此查询(即使没有附加库)


这将获取具有最大值的内部列表,然后将max函数映射到该内部列表以查找最大值并将其存储在maxval中。

获取答案的另一种方法是使用列表理解:

>>> max([x[3] for x in resultlist])
9.1931

为什么使用
sorted()[0]
而不是
max()
?这是一个巨大的性能打击排序列表只得到最大的价值。@wflynny我编辑了我的答案,因为你实际上张贴了你的评论,哈哈。+1为“itemgetter”。然而,我认为函数“max_val”的第一个定义有问题,至少我收到了一个语法错误-我猜这些偏执是有问题的。你能删除它吗?我没有足够的声誉来编辑它!?)好吧,它会在某个时刻出现。但是很好的解决方案!现在,我在下面的解决方案中也加入了itemgetter。您得到了最后一个元素,因为您知道列表是有序的,并且每个列表中的最后一个元素总是较大的???@EmiliOrtega这个答案非常具体地针对这个问题--“我有一个列表,其中包含多个列表,所有列表首先有三个字符串,然后是一个浮点数”---所以这个解决方案得到最后一个元素,因为这是数字所在。是的,我的意思是,如果你有一个类似的列表[[“1”,“1”,“a”,“10,8.3931],…],它仍然会返回8.3而不是10,对吗<代码>子列表[-1]
返回每个子列表中的最后一个值。这与分类无关。这绝对应该是公认的答案-它提供了一个通用的解决方案,而不是公认答案提供的当前列表设置解决方案的超级特定解决方案。
>>> max([x[3] for x in resultlist])
9.1931