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

时间:2015-10-21 21:24:28

标签: 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

但这只是给我一个清单。

编辑:此外,我可以通过任何方式获取值来自哪里的索引?比如,哪个子列表?

9 个答案:

答案 0 :(得分:9)

或许比pythonic方式更具功能性:

>>> max(map(lambda x: x[3], resultlist))
9.1931

首先将结果列表的每个元素映射到数字值,然后找到最大值

中间数组是:

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

答案 1 :(得分:8)

遍历外部列表并选择每个子列表的最后一个元素:

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

print max_value(resultlist)
# 9.1931

最好将所有与函数相关的变量保留在范围内(将列表作为参数传递,不要通过重用变量名来混淆命名空间)。

答案 2 :(得分:2)

resultlist = [["1", "1", "a", 8.3931], ["1", "2", "b", 6.3231], ["2", "1", "c", 9.1931]]
print(max(map(lambda x: x[-1],resultlist)))

输出:

9.1931

答案 3 :(得分:2)

如果您还想要索引,则可以enumerate使用operator.itemgetter map使用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)

将使用索引返回max的元组:

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

或者只是常规的exp:

{{1}}

答案 4 :(得分:1)

您是否尝试从浮点数(列表中的最后一个索引)获取最大数量?如果是这样,这是一个解决方案。

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

答案 5 :(得分:1)

以下是一个答案,以防你得到一个列表,其中数字并不总是在第3位:

from itertools import chain
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist)))

发生了什么事? itertools.chain展开列表列表,filter然后选择所有数值,然后使用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
import operator
resultlist = [['1', '1', 'a', 8.3931], ['1', '2', 'b', 6.3231], ['2', '1', 'c', 9.1931]]
l = filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist))
# l: [8.3931, 6.3231, 9.1931]
max(enumerate(l), key = operator.itemgetter(1))
#(2, 9.1931)

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

使用列表,其中数值位于任意位置:

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)

答案 6 :(得分:0)

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

max()

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

答案 7 :(得分:0)

正如其他人提到的,您可以用更一般的术语回答这个问题(即使没有额外的库)。

maxval = max(map(max, resultlist))
print(maxval)

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

答案 8 :(得分:0)

获得答案的另一种方法是使用列表推导式:

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