Python中如何根据学生姓名数组选取对应成绩数组行?
根据学生姓名选取对应成绩行的方法
你可以通过以下几种方式实现,先处理下二维的students数组让匹配更方便:
import numpy as np students = np.array([['Hannah'],['Alonzo'], ['Antoinette'], ['Latasha'], ['Phil']]) grades = np.array([[86, 94], [83, 79], [97, 95], [90, 87], [73, 76]]) # 把二维的students转成一维数组,简化匹配操作 students_flat = students.flatten()
方法1:布尔索引(推荐,支持重名匹配)
直接生成布尔掩码来筛选成绩行,适合有重名学生的场景,会返回所有匹配的成绩:
target_name = 'Alonzo' # 生成对应姓名的布尔掩码 name_mask = students_flat == target_name # 用掩码提取成绩 matching_grades = grades[name_mask] print(matching_grades) # 输出:[[83 79]]
方法2:通过索引位置选取
如果确定姓名唯一,可以先找到索引再直接提取:
target_name = 'Alonzo' # 获取目标姓名的索引(np.where返回的是元组,取第一个元素的第一个值) target_idx = np.where(students_flat == target_name)[0][0] # 按索引取成绩行 matching_grades = grades[target_idx] print(matching_grades) # 输出:[83 79]
额外说明
如果不想转一维数组,也可以直接用二维数组匹配,但需要把结果扁平化:
name_mask = (students == 'Alonzo').flatten() matching_grades = grades[name_mask]
内容的提问来源于stack exchange,提问作者Adar Sheere
相关产品推荐
相关产品推荐

