如何列出列表列表中的最大值(python)

时间:2014-11-29 07:07:10

标签: python list max

在所有小清单中,我必须在每个清单中创建一个包含最大偶数的列表。如果列表有奇数,则最大值为0.到目前为止,我的代码是:

a=[]
b=[]
c=''
d=''
e=''
for i in range (len(res)):
    for j in range (len(res)):
        d=res[i][j]
        if (d%2 == 0):
            d=d
            a.append(d)
        else:
            d= 0
            a.append(d)
    c = max(a)
    b.append(c)
print b

列表为[[1,2,3],[6,5,4],[5,7,9]],我需要[2,6,0],但我会继续[2,6,6]

4 个答案:

答案 0 :(得分:1)

a = [[1,2,3],[6,5,4],[5,7,9]]
[ max( filter(lambda y: y % 2 ==0,(i+[0]))) for i in a]
>>>[2, 6, 0]

我认为代码非常自我解释:

  • max(seq)返回序列中的最大数字
  • filter(fn, seq),将使用函数fn应用seq中的每个元素,并使用fn(element)保持元素是逻辑真。
  • list + [0]将返回一个包含一个元素“0”的新列表,以防列表中的所有元素都是奇数。

更新:如果是偶数,(应该给予@twasbrillig的信用)

[ 0 if all(map(lambda z: z%2,i)) == True else max( filter(lambda y: y % 2 ==0,i)) for i in a]

答案 1 :(得分:1)

max采用可选的key函数,可用于保持奇数不在运行中。见https://docs.python.org/library/functions.html#max

def fn(x):
    return x if x % 2 == 0 else float("-inf")

a = [[1,2,3],[6,5,4],[5,7,9]]
b = [ max(L, key=fn) for L in a ]
print([i if i % 2 == 0 else 0 for i in b])

给出[2, 6, 0]

也可以使用负数。 (如果您不需要支持负数,则可以将float("-inf")替换为-1。)

答案 2 :(得分:1)

由于max函数接受可迭代,您可以使用:

>>> a = [[1,2,3],[6,5,4],[5,7,9]]
>>> [max([m for m in i if m % 2 == 0] or [0]) for i in a]
[2, 6, 0]

[m for m in i if m % 2 == 0]获取偶数列表,max([m for m in i if m % 2 == 0] or [0])获取最大偶数(包括负数)或0(如果不存在偶数)。

>>> a = [[1,2,3],[6,5,4],[5,7,9,-2]]
>>> [max([m for m in i if m % 2 == 0] or [0]) for i in a]
[2, 6, -2]

答案 3 :(得分:0)

几点。

一,用xrange替换范围。它不会创建完整列表。

其次,您似乎正在迭代一个'矩阵'。我原以为所有的小名单都是不确定的。不过,您正在进行n * n评估。您可以通过首先找到最大值然后检查均匀度或奇数来执行n + n。

maxes = [ max( row ) for row in res ]
res_final = [ m if m % 2 == 0 else 0 for m in maxes ]

你必须仔细检查最后一行。但那应该做到。