目录
- 列表生成式
- 非文本文件的读写
1、列表生成式
非常方便的得到一个列表:[元素 for遍历 if筛选]
# [1,2,3,4,5,6....,100]
l1 = [x for x in range(1, 21)]
print(l1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
l2 = [x * x for x in range(1, 21)];
print(l2) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]
l3 = [x for x in range(1, 21) if x % 2 == 0]
print(l3) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# 得到20个,1-20范围的随机数
import random as rd
l4 = [rd.randint(1, 20) for x in range(20)]
print(l4) # [17, 9, 19, 9, 12, 15, 3, 18, 19, 14, 14, 20, 8, 9, 9, 14, 18, 7, 18, 8]
# A-Z
l5 = [chr(x) for x in range(65, 91)]
print(l5) # ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
l6 = [x + y for x in ['A', 'B'] for y in ['a', 'b']];
print(l6) # ['Aa', 'Ab', 'Ba', 'Bb']
# 有一个list全是数字,[1,2,3,4,5,6,7,8,9,10],将他们都变为字符串
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ss = [str(x) for x in nums];
print(ss) # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
2、列表的嵌套
2.1、习题1
# 地址、引用数据类型等的理解
l1 = [];
l2 = [1, 2, 3];
l1.append(l2); # 将l2加入到l1中
print(l1) # [ [1, 2, 3] ]
l2.append(4);
print(l1); # l1有变化吗?? [ [1, 2, 3, 4] ]
# 如果不想变化:
# 向l2中添加的是与l1相同的一个集合,而不是l1本身【l1副本】
# .copy、切片、list()
2.2、习题2
#想得到一个大集合list,格式为:
[
['A'],
['A','B'],
['A','B','C'],
['A','B','C','D']
......
['A'......'Z']
]
list1 = [];
list2 = []; # 总的集合
for x in range(65, 91):
list1.append(chr(x));
# list2.append(list1[:]); # 注意要创建副本
list2.append(list(list1));
# print(list2)
for i in list2:
print(i)
3、非文本文件的读写
3.1、读取文件的大小
# 非文本文件的读写:.doc .xls .jpg .mp3 .mp4等
# 读到的内容就是单纯的01序列,不要尝试着使用某种编码方式给它解码,没有意义。
f = open(r'C:\Users\lwx\Desktop\种树.jpg', 'rb'); # 不要忘了b、byte 原本字节的内容
ct = f.read(); # 字节序列类型的结果 b'\x \x \x \x \x .....'
f.close();
print(len(ct)) # 40764个字节
3.2、复制文件
# 非文本文件一般很少读取;读+写,来完成拷贝。
f = open(r'C:\Users\lwx\Desktop\种树.jpg', 'rb');
ct = f.read();
f.close();
f1 = open(r'D:\种树-copy.jpg', 'wb'); # 写也是要加b
f1.write(ct);
f1.close();
后续就需要解决一些问题:爬虫、Excel处理(数据处理)、图片处理等具体的工作。
4、课堂练习
课堂练习:
1、读取infos.txt文件。
2、处理,得到list+dict的数据结构:[{'name':xxx,'sex':xxx,'score':xxx},{...},{...},{...}]
3、操作数据得到:
1、打印所有学生人数
2、打印最高分是谁,多少分
3、打印及格多少人,不及格多少人
4、求班级的平均分
5、统计有多少个姓张的同学技术点:文件读取、字符串操作、list操作、dict操作。
杜静 女 71
齐根芳 女 72
郑忠营 男 72
孔小康 男 60
胡书畅 男 84
刘新良 男 0
潘恩奇 男 60
张展硕 男 75
高文达 男 79
王康萍 女 67
范乃晖 男 64
宋天宇 男 60
韩振威 男 60
张儒超 男 60
李蕊 女 87
张永丽 女 73
董梦雪 女 81
孙晶晶 女 83
刘淑明 女 69
崔梦琪 女 70
郑钰森 男 60
崔孟男 男 73
周航飞 男 76
刘雯婷 女 75
丁需峰 男 65
陈思宇 男 75
王振铎 男 65
李文桐 女 60
吉世平 男 61
牛肖凯 男 0
魏西琳 女 65
张邵娴 女 60
陈艳 女 69
李春晖 男 71
张舟 男 65
胡深 男 83
郝瑞祥 男 65
蔡成帆 男 82
刘伟平 男 60
左宇航 男 60
丁浩 男 72
金湾湾 女 83
秦嘉康 男 60
邢家浩 男 70
王自闯 男 64
邸新伟 男 67
曹元博 男 72
李晴 女 60
毛梦园 女 76
李凯 男 60
高迎春 男 72
杜家乐 男 82
刘兆京 男 76
苏岩 男 60
刘家龙 男 71
单祖皓 男 80
葛圣旗 男 72
王璐浩 男 60
李潇潇 女 83
边继辉 男 64
张莹莹 女 63
陈震东 男 70
朱攀攀 男 72
张宇 男 60
陈辛源 男 74
卢良辉 男 65
李文想 男 79
马甜甜 女 69
岳俊芳 女 75
吉庆 男 63
马春飞 男 74
乔楷罡 男 79
王志斌 男 72
李录录 女 81
侯晓盼 女 81
徐家洋 男 60
史雪程 女 61
赵梦雨 男 60
浮佳伟 男 60
马路坤 男 77
时浩田 男 60
赵亚非 男 73
邢琳琳 女 77
刘通 男 61
张志昌 男 74
张聪聪 女 68
窦明晨 男 74
葛艺茗 女 65
刘倩倩 女 78
f1 = open(r'C:\Users\lwx\Desktop\infos.txt', 'r', encoding='utf-8');
infos = f1.read(); # 读取字符串
f1.close();
# print(infos)
stus = infos.split('\n');
# print(stus)
# 例如x: '杜静\t女\t71'
rs = [{'name': x.split('\t')[0], 'sex': x.split('\t')[1], 'score': int(x.split('\t')[2])} for x in stus]
print(rs);
# 1、打印所有学生人数
print('人数:', len(rs))
# 2、打印最高分是谁,多少分 {'name': '杜静', 'sex': '女', 'score': 71}
rs.sort(key=lambda x: x['score'], reverse=True)
print(rs[0])
# 3、打印及格多少人,不及格多少人【手动遍历+计数:python filter】
jgnum = len(list(filter(lambda x: x['score'] >= 60, rs)));
notjg = len(rs) - jgnum;
print("及格:", jgnum);
print('不及格:', notjg);
# 4、求班级的平均分【手动遍历+求和:sum函数,对列表求和 】
zong = sum([x['score'] for x in rs]);
print('平均分:', round(zong / len(rs), 2)); # round保留两位小数
# 5、统计有多少个姓张的同学
zhlist = list(filter(lambda x: x['name'][0] == '张', rs));
print('姓张的人数:', len(zhlist));
保重生命的人减少情欲,保养身体的人远避荣名。——林通《省心录》
加油~~~