Python 在列表列表中查找偶数

Python 在列表列表中查找偶数,python,list,nested-loops,Python,List,Nested Loops,我想知道如何从列表列表中查找偶数。 例如: maximum_even_each_list_in_lol([[1,2,3],[6,5,4],[5,7,9]]) 应返回(最大偶数): 我从stackoverflow中找到了如何从列表中查找偶数: def maximum_even_each_list_in_lol (lol): evens=[] for number in lol: if is_even(number): evens.appen

我想知道如何从列表列表中查找偶数。
例如:

maximum_even_each_list_in_lol([[1,2,3],[6,5,4],[5,7,9]])
应返回(最大偶数):

我从stackoverflow中找到了如何从列表中查找偶数:

def maximum_even_each_list_in_lol (lol):
    evens=[]
    for number in lol:
        if is_even(number):
            evens.append(number)
    return evens

但我想知道我如何做到这一点,这样它就可以从列表中的每个列表中找到偶数。

虽然您没有明确地说出来,但似乎您正在列表中的每个列表中寻找最大偶数。从您的示例来看,如果没有偶数,您似乎希望程序添加0。在这种情况下,这将起作用:

print [max(value for value in [0] + L if not value % 2) for L in list_of_lists]

你快到了:-)

检查内置函数的功能

def maximum_even_each_list_in_lol (lol):
    evens=[0]  # Dirty trick to ensure that regardless of the `even` numbers
               # found, you'll always have a zero among the results.
    for number in lol:
        if is_even(number):
            evens.append(number)
    print "I found these even numbers (%s) among %s" % (evens, lol)
    return max(evens)  # Return the maximum value among the `evens` list.
results = []
for lst in [[1,2,3],[6,5,4],[5,7,9]]:
    print "Studying %s" % lst
    results.append(maximum_even_each_list_in_lol(lst))
print "This is what I found: %s" % results
我添加了一些
print
语句来帮助您了解代码的功能。上述代码将输出:

Studying [1, 2, 3]
I found these even numbers ([0, 2]) among [1, 2, 3]
Studying [6, 5, 4]
I found these even numbers ([0, 6, 4]) among [6, 5, 4]
Studying [5, 7, 9]
I found these even numbers ([0]) among [5, 7, 9]
This is what I found: [2, 6, 0]

据我所知,您希望迭代列表的列表,从每个列表中获取最大的偶数,如果未找到偶数,则获取0。这是您的功能:

def maximum_even_each_list_in_lol(lol):
    evens = []
    for sublist in lol:
        subevens = []
        for number in sublist:
            if (not number % 2):
                subevens.append(number)
        # As I understand you want to insert 0
        # if no even numbers were found, right?
        if not subevens:
            subevens = [0]
        evens.append(max(subevens))
    return evens

# Testing
assert maximum_even_each_list_in_lol([[1,2,3],[6,5,4],[5,7,9]]) == [2,6,0]

请务必阅读有关内置函数的内容:)

您可以使用一些优秀的Python语言构造从内到外构建此算法:

# Function to determine if one number is even
is_even = lambda x : x%2==0

# Function to return just the even numbers of a list
just_evens = lambda x : filter(is_even, x)

# Function to return the maximum number in a list, or '0' if there is none
get_max = lambda x : max(x) if len(x) else 0

# Function to return the maximum even number of a list
max_even = lambda x : get_max(just_evens(x))

# Print out the maximum even number from each list:
map(max_even, [[1,2,3],[6,5,4],[5,7,9]])
这将打印出:

[2, 6, None]
给你:

>>> [ max(x) if len(x)>0 else 0 for x in [ list(filter(lambda x:x%2==0,x)) for x in a ]]
[2, 6, 0]
我使用lambda检查偶数,然后过滤以保存值为true,然后max if length of list大于0 else 0将max作为默认值,因此如果过滤后没有偶数,我们可以将
0
作为默认值返回:

l = [[1,2,3],[6,5,4],[5,7,9]]
print([max(filter(lambda x: not x % 2,x),default=0) for x in l])
[2, 6, 0]

这个0是从哪里来的?你从哪里得到的?为什么4没有出现?它应该是[2,6,4],对于只包含奇数项的列表的偶数数字,OP希望0作为输出。对于0部分,我不知道如何得到,但我的教授将0作为返回值,所以我自己也被这个问题弄糊涂了。OP规范中的示例结果是零,而不是
None
。否则,我非常感谢您的回答。已更新为默认值为
0
。准确地说,是Python 3.4+:-)@AshwiniChaudhary,是的,忘了添加链接
l = [[1,2,3],[6,5,4],[5,7,9]]
print([max(filter(lambda x: not x % 2,x),default=0) for x in l])
[2, 6, 0]