例如:
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。
非常感谢。
答案 0 :(得分:6)
列表按元素排序。由于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...
的下一个索引。
我不确定您希望如何选择最大子列表:具有最大总和的子列表,子列表包含最大数量?如果默认行为没有删除它,您将必须编写所需的行为。
答案 1 :(得分:1)
摩西已经解释了为什么你得到了错误的结果:比较列表时,第一个元素比另一个元素“胜出”。
要获得最大值,您必须展平您的列表:
print(max(x for l in a for x in l))