请参见以下示例:
>>>f = [[1],[2],[3]]
>>>max(f)
Out[21]: [3]
>>>max(*f)
Out[22]: [3]
解压缩运算符在这里没有作用,我试图解压缩一个列表并获得最大矩阵值(两个暗列表)。
答案 0 :(得分:8)
max
的文档中提到:
max(可迭代,* [,键,默认])
max(arg1,arg2,* args [,key])
...
如果提供了一个位置参数,则它应该是可迭代的。返回iterable中最大的项目。如果提供了两个或更多位置参数,则返回最大的位置参数。
在第一种情况下,您有一个位置参数,在第二种情况下,您有多个位置参数。
要获得所需的内容,这是您可以尝试的矩阵中的最大条目
max(entry for row in matrix for entry in row)
这会将一个参数传递给max函数,该函数是一个生成器,它对矩阵中的所有条目进行迭代-触发第一种情况,即找到可迭代项的最大值。
答案 1 :(得分:4)
您需要将列表链接到一个可迭代的列表中,以使其起作用。 itertools.chain
将允许您执行此操作:
from itertools import chain
max(chain(*f))
要在没有itertools
或其他导入的情况下解压缩列表,请使用嵌套的理解:
max(x for row in f for x in row)
max
有两种模式。如果您传入一个位置参数,例如f
,它将被解释为可迭代的,并将返回该可迭代的最大元素。如果您传入多个positionnant参数,例如*f
,它将找到这些元素的最大值。由于列表在Python中具有可比性,因此两个版本确实是等效的。
答案 2 :(得分:2)
您可以将每个子列表的最大值放入列表中,然后在其上调用最大值。
max(max(i) for i in f)
答案 3 :(得分:1)
df["value"] = df.apply(calculate, axis=1)
应该是您的第一通电话。
help(max)
Help on built-in function max in module builtins:
max(...)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
的意思是max(f)
仅带有一个参数max
,并返回其中最大的元素。
[[1],[2],[3]]
的意思是max(*f)
,带有三个参数max
,并返回其中最大的一个。
显然,这些在您的示例中是等效的。
但是通常,您应该使用前者来找到一个可迭代的最大值。这是正确的用例。后者将中断例如[1], [2], [3]
。
对于您的特定问题,您需要将列表列表展平为单个可迭代对象,并将其传递给f = [1]
。这是一种快速的方法:
max
答案 4 :(得分:1)
这是因为max
将具有三个列表,然后得到最大列表,因此您可以对整数列表执行sum
:
>>> f=[[1],[2],[3]]
>>> max(sum(f,[]))
3
>>>
也是因为:
>>> print(max.__doc__)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
>>>
它说“有两个或更多参数,返回最大参数。”,所以我们有三个参数,因此3> 2是True
,然后[3]
是最大参数
或者可以使用reduce
:
>>> from functools import reduce
>>> max(reduce(lambda x,y: x+y,f))
3
>>>
甚至与疯狂物理学家的回答相似,但我使用.from_iterable
而不是打开包装:
>>> import itertools
>>> max(itertools.chain.from_iterable(f))
3
>>>
答案 5 :(得分:1)
给出:
//If THER NOTE = 1
=IF(COUNTIFS(C:C, "Marley,Bob", D:D,"THER NOTE") = 1,COUNTIFS(C:C, "Marley,Bob", D:D,"DA")+COUNTIFS(C:C, "Marley,Bob", D:D,"THER NOTE"),0)
//If THER NOTE = 2
=IF(COUNTIFS(C:C, "Marley,Bob", D:D,"THER NOTE") = 2,COUNTIFS(C:C, "Marley,Bob", D:D,"DA")+COUNTIFS(C:C, "Marley,Bob", D:D,"THER NOTE"),0)
mat=[
[1, 2, 3],
[4, 5, 6],
[0, 9, 10]
]
或max(mat)
都会得到相同的结果,因为正在比较各个子列表:
max(*mat)
在第一种情况下,>>> max(mat)
[4, 5, 6]
>>> max(*mat)
[4, 5, 6]
,您有一个iterable列表列表,一次返回每个子列表。在第二种情况下,max(mat)
将列表列表中的元素(子列表)解压缩为max(*mat)
的多个单独参数。
如果您想要其中具有最大值的子列表,请使用max
作为键函数:
max
如果要在二维矩阵中设置单个最大值,可以将其展平:
>>> max(mat, key=max)
[0, 9, 10]
或者有三个>>> max(v for sl in mat for v in sl)
10
:
max