簡體   English   中英

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

[英]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)保持元素是邏輯真。
  • 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]

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM