从带有列表的列表中获取最大值?
Get max value from a list with lists?
所以我有一个包含多个列表的列表,这些列表首先包含三个字符串,然后是一个浮点数,例如:
resultlist = [["1", "1", "a", 8.3931], ["1", "2", "b", 6.3231], ["2", "1", "c", 9.1931]]
如何创建一个 returns 最大值(此处为 9.1931)的函数?我试过了
def MaxValue():
max_value = max(resultlist)
return max_value
但这只是给了我一个列表。
编辑:还有,我可以通过任何方式获取值来源的索引吗?比如,来自哪个子列表?
您是否试图从浮点数(列表中的最后一个索引)中获取最大数量?如果是这样,这里有一个解决方案。
last_indices = [x[3] for x in resultlist]
return max(last_indices)
遍历外部列表和select每个子列表的最后一个元素:
def max_value(inputlist):
return max([sublist[-1] for sublist in inputlist])
print max_value(resultlist)
# 9.1931
最好将所有与函数相关的变量都保留在范围内(将列表作为参数传递,不要通过重复使用变量名称来混淆命名空间)。
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
也许比 pythonic 方式更实用:
>>> max(map(lambda x: x[3], resultlist))
9.1931
它首先将结果列表的每个元素映射到数字值,然后找到最大值。
中间数组为:
>>> map(lambda x: x[3], resultlist)
[8.3931000000000004, 6.3231000000000002, 9.1930999999999994]
如果你也想要索引,你可以使用 enumerate
和 operator.itemgetter
使用 map
:
from operator import itemgetter
def max_val(l, i):
return max(enumerate(map(itemgetter(i), l)),key=itemgetter(1)))
这将 return 具有索引的最大值的元组:
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))
这是一个答案,以防万一你得到一个列表,其中的数字并不总是在第 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)
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()
returns 第一个元素是所有列表第一个元素中最大值的列表,而 np.max()
returns 所有嵌套列表中的最大值。
正如其他人所提到的,您可以用更笼统的术语回答这个问题(即使没有额外的库)。
maxval = max(map(max, resultlist))
print(maxval)
这会获取具有最大值的内部列表,然后将 max 函数映射到该内部列表以找到最大值并将其存储在 maxval 中。
获得答案的另一种方法是使用列表理解:
>>> max([x[3] for x in resultlist])
9.1931
所以我有一个包含多个列表的列表,这些列表首先包含三个字符串,然后是一个浮点数,例如:
resultlist = [["1", "1", "a", 8.3931], ["1", "2", "b", 6.3231], ["2", "1", "c", 9.1931]]
如何创建一个 returns 最大值(此处为 9.1931)的函数?我试过了
def MaxValue():
max_value = max(resultlist)
return max_value
但这只是给了我一个列表。
编辑:还有,我可以通过任何方式获取值来源的索引吗?比如,来自哪个子列表?
您是否试图从浮点数(列表中的最后一个索引)中获取最大数量?如果是这样,这里有一个解决方案。
last_indices = [x[3] for x in resultlist]
return max(last_indices)
遍历外部列表和select每个子列表的最后一个元素:
def max_value(inputlist):
return max([sublist[-1] for sublist in inputlist])
print max_value(resultlist)
# 9.1931
最好将所有与函数相关的变量都保留在范围内(将列表作为参数传递,不要通过重复使用变量名称来混淆命名空间)。
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
也许比 pythonic 方式更实用:
>>> max(map(lambda x: x[3], resultlist))
9.1931
它首先将结果列表的每个元素映射到数字值,然后找到最大值。
中间数组为:
>>> map(lambda x: x[3], resultlist)
[8.3931000000000004, 6.3231000000000002, 9.1930999999999994]
如果你也想要索引,你可以使用 enumerate
和 operator.itemgetter
使用 map
:
from operator import itemgetter
def max_val(l, i):
return max(enumerate(map(itemgetter(i), l)),key=itemgetter(1)))
这将 return 具有索引的最大值的元组:
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))
这是一个答案,以防万一你得到一个列表,其中的数字并不总是在第 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)
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()
returns 第一个元素是所有列表第一个元素中最大值的列表,而 np.max()
returns 所有嵌套列表中的最大值。
正如其他人所提到的,您可以用更笼统的术语回答这个问题(即使没有额外的库)。
maxval = max(map(max, resultlist))
print(maxval)
这会获取具有最大值的内部列表,然后将 max 函数映射到该内部列表以找到最大值并将其存储在 maxval 中。
获得答案的另一种方法是使用列表理解:
>>> max([x[3] for x in resultlist])
9.1931