在嵌套列表(2d矩阵)上循环,并对第二个列表中指定的特定索引的值运行条件检查



我一直在努力理解这一点,但我认为我未能理解嵌套循环的核心基本原理。我的问题不仅仅是答案是什么,我真的很感激并解释如何思考和处理这样的问题。这是针对课程的,但我想真正理解为什么我会遇到这个问题,以及python在这方面是如何工作的。

我有下面的代码:

到目前为止我有什么

import numpy as np
marks = np.array([[66, 26, 54, 80, 56, 42, 56, 60],
[34, 63, 90, 98, 78, 65, 45, 54],
[94, 87, 92, 80, 79, 90, 98, 89]])
def canGraduate(arr, sNum):
studentId = marks[sNum]
passedCompulsoryModule = False
passedModuleCounter = 0
if (studentId[1] >= 40) & (studentId[4] >= 40):
passedCompulsoryModule = True
for element in studentId:
if element >= 40:
passedModuleCounter += 1
if (passedModuleCounter >= 3) & (passedCompulsoryModule == True):
print(f'Student has passed {passedModuleCounter} modules and both compulsory modules. They have passed.')
else:
print("Student has failed the course.")
canGraduate(marks, 0)
canGraduate(marks, 1)
canGraduate(marks, 2)

这段代码的作用是,当我调用以列表为标记的函数,特别是针对外部列表的第一个索引时,它将运行整个循环,并对值进行简单的条件检查。这很好用。打印出来:

Student has failed the course.
Student has passed 7 modules and both compulsory modules. They have passed.
Student has passed 8 modules and both compulsory modules. They have passed.

就在我需要的时候。

我的主要问题

我想运行相同的代码,但我想创建一个列表,我们将称之为强制模块,输入两个值1和4,这两个值是我用来在上面的代码块中运行初始if语句的索引。所以我们有以下代码:

compulsoryModules = [1, 4]

然而,我很难按原样使用这个变量,因为我似乎找不到在同一个变量中有两个索引的方法?我可以只放一个索引,比如[1]或[4],它会很好,但我的任务是把它放在一个列表中。

在调用要检查的函数时,强制模块列表将用作第三个参数。因此,理想情况下,我可以有多个不同索引的列表,并可以使用它们来调用各种列表,以关注不同的索引。

所以这看起来像:

def canGraduate(arr, sNum, lst):

情况看起来像:

if studentId[lst] >= 40:

然而,我似乎得到的错误是:

ValueError:包含多个元素的数组的真值不明确。使用.any((或.all((

这对我来说很奇怪,因为我只要求检查两个单独的标记。我不想具体检查所有或任何一个。它需要这两个标志。

我已尝试使用此网站中推荐的内容:https://www.kite.com/python/answers/how-to-access-multiple-indices-of-a-list-in-python

这就是使用地图功能来尝试并瞄准这两个标记。但这样做似乎是针对外部列表,所以我犯了一个错误,因为[4]指数把它抛出了界外。我想试着把它放在一个循环中访问内部列表,但我似乎也遇到了同样的问题。

我一直在网上寻找是否能找到答案,但现在我不知所措。

解决这个问题的方法是什么?

最简单的解决方案是,您只需更换

if (studentId[1] >= 40) & (studentId[4] >= 40):

带有

for cm in compulsoryModules:
if studentId[cm] < 40:
passedCompulsoryModules = False
break

正如您所看到的,您需要在compulsoryModules的元素上循环。不能将整个列表作为索引传递,只能在循环中传递单个项。

最新更新