python为什么max(max(float_2d_array))给出了错误的答案?

例如:

a = [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 1.2852976787772832, 0.7965388321000092, 0.0, 0.0, 0.0, 0.0, 0.0],
 [0.0, 0.0, 0.0, 6.409872844109646, 0.17506688391255013, 0.0, 0.0, 0.0, 0.0],
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]
print max(max(a))
print max(a)

结果是:

1.28529767878

[0.0, 0.0, 1.2852976787772832, 0.7965388321000092, 0.0, 0.0, 0.0, 0.0, 0.0]

这显然是错误的,最大值应该是6.409872844109646.

b = []
for i in a:
    b.extend(i)
print max(b)

6.40987284411

这是python 2.7,Cpython.

非常感谢你.

最佳答案 列表按元素排序.由于1.2852976787772832的索引比候选子列表中的6.409872844109646提前一个位置,因此包含前者的列表将被选为最大值.

在第二个列表中的相同索引中,我们有一个0和1.2852976787772832显然大于0:

[0.0, 0.0, 1.2852976787772832, 0.7965388321000092, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 6.409872844109646, 0.17506688391255013, 0.0, 0.0, 0.0, 0.0]
#           ^ here's your tie-breaker 

事实上,永远不会检查包含6.4 …的下一个索引.

我不确定您希望如何选择最大子列表:具有最大总和的子列表,子列表包含最大数量?如果默认行为没有删除它,您将必须编写所需的行为.

点赞