当我们需要对一个数据列表进行分组并查找最值时,可以使用Python中的groupby()
函数。
首先需要导入groupby()
函数所在的模块,如下所示:
from itertools import groupby
然后,我们需要准备一个要分组的数据列表,并将其按照指定属性进行排序,以便于分组。假设我们现在有一个students
列表,其中包含了多个学生的姓名、班级、考试成绩等信息,我们需要将这些学生按照班级进行分组,并分别查找每个班级的最高分和最低分。
首先,我们可以使用sorted()
函数对students
列表按照班级(即student[1]
)进行排序,代码如下:
students = [
('张三', '一班', 78),
('李四', '二班', 92),
('王五', '一班', 85),
('赵六', '三班', 80),
('钱七', '二班', 88),
('孙八', '三班', 75),
]
sorted_students = sorted(students, key=lambda student: student[1])
接下来,我们可以使用groupby()
函数将排序后的数据按照班级进行分组,并遍历每个分组,查找其中成绩的最值。代码如下:
for class_name, group in groupby(sorted_students, key=lambda student: student[1]):
scores = [student[2] for student in group]
max_score = max(scores)
min_score = min(scores)
print(f"{class_name}班最高分为{max_score},最低分为{min_score}")
运行上述代码,输出结果如下:
一班班最高分为85,最低分为78
二班班最高分为92,最低分为88
三班班最高分为80,最低分为75
除了查找最值之外,groupby()
函数还可以实现更多复杂的分组操作,比如将相邻的元素进行分组、按照一定规则进行分组等。下面再给出一个示例,将一个列表中的元素按照连续递增序列进行分组。假设我们有以下的列表:
numbers = [1, 2, 3, 5, 6, 7, 9, 11, 12, 13]
我们可以使用groupby()
函数将其中连续递增的元素分成一组,代码如下:
for key, group in groupby(enumerate(numbers), lambda x: x[1] - x[0]):
print([x[1] for x in group])
运行上述代码,输出结果如下:
[1, 2, 3]
[5, 6, 7]
[9]
[11, 12, 13]
这样,我们就实现了对一个列表中连续递增序列的分组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python groupby函数实现分组后选取最值 - Python技术站