确定2D列表中列表的和是奇数还是偶数

2024-06-17 08:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,有一个作业问题我遇到了麻烦。作业题如下:

实现函数evenrow(),该函数接受二维整数列表,如果表的每一行总和为偶数,则返回True;否则返回False(即,如果某些行的总和为奇数)

结果应该是:

evenrow([[1,3], [2,4], [0,6]])

True

evenrow([[1,3], [3,4], [0,5]])

False

以下是我目前的功能:

^{pr2}$

出于某种原因,不管我输入什么,函数总是给我真值。有什么我忽略的吗?如有任何提示,将不胜感激!在


Tags: 函数功能falsetrue列表作业整数奇数
3条回答

一旦你return从一个方法中,你就不能通过循环“返回”。相反,如果找到一个奇数行,应该返回False,因为一旦找到一个奇数行就不需要再检查任何行了。否则,如果您浏览了所有行并且没有找到奇数,那么您就知道它们都是偶数,并且可以返回True。在

def evenrow(lst):
    for i in lst:
        if sum(i) % 2 == 1:
            return False
    return True

或者,如果你觉得厚脸皮,看看你能不能弄明白这个超级短名单理解版是如何工作的:

^{pr2}$

我认为乔兰·比斯利的答案最适合你目前的知识水平,但值得一看的是一种更为Python式的、更高阶的解决问题的方法:

def even2d(list2d):
    return all(sum(row) % 2 == 0 for row in list2d)

你可能不会马上明白,但我想我可以解释。在

首先,all函数只返回True,如果序列中的每个值都为真。这是一个非常明显的优点,它避免了“向后思考”的需要(“除非一行是奇数,否则所有行都是偶数的”)。关键是,中间的表达式是什么样的序列?在

首先,如何获得行和序列?在

^{pr2}$

Python允许您在列表理解中缩写此模式:

row_sums = [sum(row) for row in list2d]

当然,这个表达式sum(row)可以是更复杂的,比如sum(row) % 2 == 0

row_evens = [sum(row) % 2 == 0 for row in list2d]

所以:

def even2d(list2d):
    row_evens = [sum(row) % 2 == 0 for row in list2d]
    return all(row_evens)

你甚至可以用一个表达式来计算,但现在你还不能用这个表达式来计算。你要做的就是把方括号变成括号:

def even2d(list2d):
    row_evens = (sum(row) % 2 == 0 for row in list2d)
    return all(row_evens)

只需检查偶数功能中的异常情况以短路 最后返回true

def even2d(list2d):
   for sub_list in list2d:
       if sum(sub_list)%2 == 1:
           return False
   return True

反之亦然

相关问题 更多 >