python在for语句中迭代多个可迭代对象问题

案例一:某班有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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值