本次学习内容
元组
字典
集合
字符编码
文件处理
一、元组
定义:与列表类似,定义是使用()
特性:
1.可存放多个值
2.元组里的元素是不可变的
3.有序,下标从0开始从左往右的顺序访问
元组常用操作和列表一样
二、字典
定义:{}里key-value结构
key定义规则:
1.不可变(数字,字符串,元组,*列表是不能作为key的,因为列表里的元素可变)
2.唯一,否则执行时会覆盖前面的value
dic = {'age':21,'age':22}
value定义规则:任意数据类型
dic1 = { 1:'alex', 'name':'hongpeng', (1,2,3):{'age':18} }
字典的常用操作
#创建,第一种最常用 person = {"name": "alex", "age": 18} person = dict(name='alex', age=18) person = dict({"name": "alex", 'age': 18}) person = dict((['name','alex'],['age',18])) #增 dic = {'name':'alex','age':18} dic['gender'] = 'male' #改 dic['age'] =20 #删 del dic['name'] dic.pop('name')# #查 print(dic.get('nameeeee'))#不会报错,返回None print(dic['name']) #快速创建字典 data = dict.fromkeys([1,2,3],{"name":"alex","age":18}) print(data) #输出{1: {'age': 18, 'name': 'alex'}, 2: {'age': 18, 'name': 'alex'}, 3: {'age': 18, 'name': 'alex'}} #用这种方法创建字典时有个坑,对应的value的值在内存中都是同一地址,也就是说如果只改1这个key对应的value,2,3对应的value也会改。 data[1]["name"] = 'Alex' print(data) #打印字典的key和value (1) for k,v in dic.items():字典转换列表,少用,占内存 print(k,v) print(dic.keys()) (2) for i in dic.keys(): print(i,dic[i])
字典的深浅copy
#浅copy,只copy第一层 dic = {'name':'hongpeng','age':21,'girlfriends':['mashengxi','wutenglan','xiaozemaliya']} dic2 = dic.copy() print(dic) print(dic2) dic['name'] = 'alex' dic['girlfriends'][2] = 'fandaoai' print(dic) print(dic2) #输出 {'name': 'hongpeng', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'xiaozemaliya']} {'name': 'hongpeng', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'xiaozemaliya']} {'name': 'alex', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'fandaoai']} {'name': 'hongpeng', 'age': 21, 'girlfriends': ['mashengxi', 'wutenglan', 'fandaoai']}
应用:联合信用卡
acc1 = {"name":"林海峰", "account":{"credit":3000, "balance":3000}}
acc2 = acc1.copy()
acc2["name"] ="杠娘"
print(acc1)
print(acc2)
acc2["account"]["balance"] -= 680
print(acc2)
print(acc1)
#深copy import copy acc = {'name':'alex','age':18,'information':['gender','male']} acc1 = copy.deepcopy(acc) acc2 = acc.copy() print(id(acc['information'])) print(id(acc1['information'])) print(id(acc2['information']))
三级菜单优化版本
知识点:
- 字典
- 列表
- while循环
- if...else流程控制
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } current_level = menu last_level = [] while True: for key in current_level: print(key) choice = input(">>:").strip() if len(choice) == 0:continue if choice == 'b': if len(last_level) == 0:break #当前层改成父亲层,并删除last_level列表中的父亲层 current_level = last_level[-1] last_level.pop() if choice not in current_level:continue #把当前层放入last_level列表中 last_level.append(current_level) current_level = current_level[choice]
三、集合
定义:集合是一个无序的,不重复的数据组合
基本操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 基本操作: t.add('x') # 添加一项 s.update([10,37,42]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s) set 的长度 x in s 测试 x 是否是 s 的成员 x not in s 测试 x 是否不是 s 的成员 s.issubset(t) s <= t 测试是否 s 中的每一个元素都在 t 中 s.issuperset(t) s >= t 测试是否 t 中的每一个元素都在 s 中 s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t) s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy() 返回 set “s”的一个浅复制
四、字符编码
1.字符编码一种在内存,内存固定使用unicode编码,一种在硬盘,硬盘的编码(即可以修改的编码)
2.使用什么编码往硬盘存,就用什么编码去读
3.程序运行分两阶段:1.从硬盘读到内存2.python解释器运行已经读到内存的代码
encode:编码
decode:解码
五、文件处理
文件的几种打开模式
r:只读(文件必须存在,不存在报错)
w:只写(不存在创建,存在清空)
a:追加(可读,不存在创建,存在追加内容)
r+:读写
w+:写读,会把原文件覆盖
a+:追加
#读 f = open('test','r',encoding='utf-8') for line in f.readlines():#会一次性读到内存里 print(line.strip()) for line in f:#读一行写一行 print(line.strip())
#关闭 f.close()
with open('test','r',encoding='utf-8')as f#操作完不需要close文件 f.write() f.flush()#操作完文件刷新,从内存到硬盘,不需要close文件 f.seek()#寻找
f.tell()#当前文件光标位置