没有人会记得死的东西,所以要活下去,咬牙切齿的活下去!
import sys
from itertools import chain
from random import randint
reload(sys)
sys.setdefaultencoding('utf-8')

案例一

要求:一个班级有10个人,考试语数外三门,要求打印每个同学的每一门成绩(同一行显示)并且统计总分数。
困惑:多重迭代?
分析:使用zip()传入三个列表,然后遍历即可。

c = [randint(10,100) for _ in range(10)]
m = [randint(10,100) for _ in range(10)]
e = [randint(10,100) for _ in range(10)]
# c,m,e三张列表代表了不同的分数
for cc,mm,ee in zip(c,m,e):
    t = int(cc) + int(mm) + int(ee)
    print cc,mm,ee
    print 'SCORE:' + str(t)

案例二

要求:一个班级有10个人,考试语数外三门,要求统计分数高于60分的人数。
困惑:创建一个新的列表,然后分三次循环并且判断?
分析:使用chain()何以合并多个不同的列表,enumeratr()可以按照一个一定的顺序输出迭代对象和对象的序号(说教无益,上代码。)

chain()的使用方法

for x in chain(['A','B','C'],[1,2,3]):print x

运行结果:

A
B
C
1
2
3

enumerate()的用法

c = [randint(10,100) for _ in range(10)]
for x,v in enumerate(c):print x,v

运行结果:

0 43
1 96
2 96
3 86
4 68
5 99
6 21
7 58
8 33
9 88

当然还有一种写法和使用enumerate有异曲同工之妙。

c = [randint(10, 100) for _ in range(10)]
for i in range(len(c)):
    print i,c[i]

运行结果:

0 19
1 31
2 27
3 32
4 20
5 84
6 75
7 96
8 88
9 87

代码实现

c = [randint(10,100) for _ in range(10)]
m = [randint(10,100) for _ in range(10)]
e = [randint(10,100) for _ in range(10)]
count = 0
for x in chain(c,m,e):
#其中cme的人数不一致也可以用  
    if x >60:
        count +=1
print count

运行结果:

16