在python中找到二维矩阵(二维)中不同列表的最小值、最大值和平均值

Posted

技术标签:

【中文标题】在python中找到二维矩阵(二维)中不同列表的最小值、最大值和平均值【英文标题】:finding the minimum, maximum and average of different list in a 2D matrix (two-dimensional) in python 【发布时间】:2020-09-12 14:40:45 【问题描述】:

我试图在矩阵之后(或之内)找到每个学生的最小值、最大值和平均值。如何在循环迭代中访问每个学生的分数列表?我已经开始在函数 (findlowest()) 中找到最小值,但不知道如何一次只获得 1 个学生的考试成绩。

studentExam = 5
minMaxScore = 5

def main():
    global studentName, studentExam, score, scoreList, examScoreMaxList, min, max


def ValidateUser(score):
    while score < 0 or score > 100:
        score = float(input("Invalid input, please try again"))
    return score


def getStudentInfo():
    studentName = int(input("enter the number of student: "))
    # studentExam = int(input("how many exam scores: "))
    # Initialize matrix
    matrix = []
    # For user input
    for i in range(studentName):  # A for loop for row entries
        scoreList = []
        scoreList.append(input("enter name of students " + str(i + 1) + ": "))

        for j in range(studentExam):  # A for loop for column entries

            score = float(input("enter exam " + str(j + 1) + ": "))
            score = ValidateUser(score)
            scoreList.append(score)
        matrix.append(scoreList)
    print(matrix)
    # for printing
    for i in range(studentName):
        for j in range(studentExam+1):
            print(matrix[i][j], end=" ")
        print()
getStudentInfo()


def findLowest():
    minlist = []
    min = minlist[0]
    for i in studentExam[0:5]:
        if i < min:
            min = i
    print("the minimum number is: ", min)

findLowest()

我希望代码显示类似于以下内容:

Mike H: min score - 78
        max score - 94
        avg score - 85

Sarah G: min score - 78
         max score - 94
         avg score - 85

【问题讨论】:

请将此减少并增强为预期的MRE。显示中间结果与预期结果的偏差。 【参考方案1】:

在一个列表中混合不同类型的数据可能会造成混淆。我将它们分开 - 学生姓名是字典中的键,分数列表是值。

此外,关于示例代码的前半部分,一般的最佳做法是避免使用全局变量,常量值除外。

def getStudentInfo():
    studentName = int(input("enter the number of student: "))
    # studentExam = int(input("how many exam scores: "))
    # Initialize matrix
    matrix = 
    # For user input
    for i in range(studentName):  # A for loop for row entries
        name = input("enter name of students " + str(i + 1) + ": ")
        matrix[name] = []

        for j in range(studentExam):  # A for loop for column entries
            score = float(input("enter exam " + str(j + 1) + ": "))
            score = ValidateUser(score)
            matrix[name].append(score)
    print(matrix)
    return matrix
data = getStudentInfo()

def findInfo(data, name = None):
    def findInfoByName(name):
        if name in data:
            scores = data[name]
            minScore = min(scores)
            maxScore = max(scores)
            avgScore = sum(scores) / len(scores)
            print(f"name:\tmin score - minScore")
            print(f"\tmax score - maxScore")
            print(f"\tavg score - avgScore")
    if name is None:
        for name in data:
            findInfoByName(name)
    else:
        findInfoByName(name)

findInfo(data)

【讨论】:

我是 python 新手,想知道您对“data = getStudentInfo()”的使用。有关如何搜索以了解更多信息的任何建议。我的搜索只是导致数据类型,但没有关于你如何使用它。在此先感谢... @Sirkel360 你的意思是使用“赋值”?这是大多数编程语言的基础知识,您可能需要阅读一些 CS 101 或教科书。【参考方案2】:

应该这样做。你只需要一个嵌套的 for 循环。

scores = [["Mike", 100, 98, 43, 56, 43], ["John", 95, 32, 79, 75, 67]]

for arr in scores:
    #arr = ["Mike", 100, 98, 43, 56, 43] or ["John", 95, 32, 79, 75, 67]
    min = None
    max = None
    sum = 0
    studentName = None
    for i in arr:
        if type(i) != str:
            if not min or i < min:
                min = i

            if not max or i > max:
                max = i

            sum += i
        else:
            studentName = i
    avg = sum/5

    print(studentName + ": \t min score - " + str(min))
    print("\t max score - " + str(max))
    print("\t avg score - " + str(avg))
    print()

【讨论】:

你好法迪法拉格。有没有办法在不导入数组的情况下做到这一点?我不断收到未定义分数的跟踪球错误和名称错误。你能澄清一下(我是一个菜鸟)这是如何从矩阵循环中获取列表的吗?你的回答太棒了。非常感谢... NameError: name 'score' 未定义。我确实检查了我的变量并使用它

以上是关于在python中找到二维矩阵(二维)中不同列表的最小值、最大值和平均值的主要内容,如果未能解决你的问题,请参考以下文章

Python中的二维列表编辑

坑python新建二维列表的一个小坑

(Python)numpy 常用操作

C代码和python代码:用二维数组实现矩阵的转置

Python二维列表,矩阵算式输出后格式的问题,请问这怎么把数字对齐?

如何在二维矩阵中找到孔?