Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定2D列表中的列表之和是奇数还是偶数_Python - Fatal编程技术网

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

Python 确定2D列表中的列表之和是奇数还是偶数,python,Python,我是Python新手,我的家庭作业有问题。作业问题如下: 实现函数evenrow(),该函数接受一个二维整数列表,如果表中的每一行总和为偶数,则返回True;否则返回False(即,如果某一行总和为奇数) 结果应该是这样的: evenrow([[1,3], [2,4], [0,6]]) True evenrow([[1,3], [3,4], [0,5]]) False 现在我的函数是这样的: def evenrow(lst): mysum = 0 for i in lst

我是Python新手,我的家庭作业有问题。作业问题如下:

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

结果应该是这样的:

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

True

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

False
现在我的函数是这样的:

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

出于某种原因,无论我输入什么,我的函数都会一直为我提供True。有什么我忽略的吗?任何提示都将不胜感激

仅检查偶数功能中的异常,以防短路 最后返回true

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

反之亦然,检查异常

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

def evenrow(lst):
    for i in lst:
        if sum(i) % 2 == 1:
            return False
    return True
或者,如果你觉得脸皮厚,看看你是否能弄明白这个超级短名单理解版是如何工作的:

def evenrow(lst):
    return not len([x for x in lst if sum(x) % 2])

我认为Joran Beasley的答案最适合你目前的知识水平,但值得一看一种更具python风格、更高层次的方法来解决这个问题:

def even2d(list2d):
    return all(sum(row) % 2 == 0 for row in list2d)
你可能不会马上明白,但我想我可以解释

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

首先,如何获得行和序列

row_sums = []
for row in list2d:
    row_sum = sum(row)
    row_sums.append(row_sum)
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)

仅检查偶数函数中的奇数,仅检查奇数函数中的奇数为什么要执行
mysum+=sum(i)
?您只关心每行的总和是否为偶数。当每一行都是偶数时,所有行的运行总和总是偶数,这增加了不必要的复杂性
def even2d(list2d):
    row_evens = (sum(row) % 2 == 0 for row in list2d)
    return all(row_evens)