案例一:某班有N名学生,请对语文、数学、英语成绩求和(注:三科成绩分别在一个列表中)
该问题属于对多个可迭代对象并行求和处理,可以使用zip将多个类别分为元组进行计算,基本代码方法如下:
from random import randint
# 模拟生成40名学生的语数外成绩
chinese = [randint(40,100) for x in range(40)]
math = [randint(40,100) for x in range(40)]
english = [randint(40,100) for x in range(40)]
total = []
# 常规计算成绩
for index in range(len(math)):
total.append(chinese[index] + math[index] + english[index])
print(total)
# 利用zip元组并行计算
total.clear()
for c, m, e in zip(chinese, math, english):
total.append( c+ m + e)
print(total)
案例二:某年级有N个班,某次考试的数学成绩分别存储在N个列表中,统计该年级学生数学成绩在90分以上的人数
分析:一般常规的思路是分别对N个类别判断进行统计;该问题属于列表串行计算问题,可使用标准库itertools.chain将多个可迭代对象连接在一起,基本代码和思路如下:
from random import randint
from itertools import chain
#随机生成4个班学生的英语成绩
math1 = [randint(40,100) for x in range(40)]
math2 = [randint(40,100) for x in range(45)]
math3 = [randint(40,100) for x in range(50)]
math4 = [randint(40,100) for x in range(42)]
count = 0
# 常规方法:
for math in [math1, math2, math3, math4]:
for score in math:
if score > 90:
count += 1
print('常规统计结果:', count)
count = 0
for math in chain(math1, math2, math3, math4):
if math > 90:
count += 1
print('chain统计结果:', count)
#结果如下:
常规统计结果: 31
chain统计结果: 31