[英]How to make a list of the maximums in a list of lists (python)
在所有小列表中,我必須使用每個列表中的最大偶數制作一個列表。 如果列表有奇數,則最大值為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]
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]
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]
也可以使用負數。 (如果您不需要支持負數,則可以用-1
替換float("-inf")
。)
由於max
函數接受iterable,您可以使用:
>>> 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或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]
幾點。
一,用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 ]
你必須仔細檢查最后一行。 但那應該做到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.