在所有小清单中,我必须在每个清单中创建一个包含最大偶数的列表。如果列表有奇数,则最大值为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]
答案 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)保持元素是逻辑真。更新:如果是偶数,(应该给予@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 ]
你必须仔细检查最后一行。但那应该做到。