整理python笔记001(列表(深浅copy),元祖,字典,集合)
ASCII的255个字符,最长不过是11111111,那么全都是八位,不足的用0补齐。每个0或1都占1bit(比特),8bit = 1 bytes字节,是最小的存储单位,写作1B 然后,1KB = 1024B 1MB = 1024KB...
英文程序员就圆满了。
GB2312是中国制定的中文的编码 Unicode把所有语言的编码都统一在了一起。 ASCII编码是一个字节,而Unicode通常是两个字节; 字母A用ASCII编码是十进制的65,二进制的01000001; 字符0用ASCII编码是十进制的48,二进制的00110000; 汉字“中”已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。 你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。 新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。 所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间: 字符 ASCII Unicode UTF-8 A 01000001 00000000 01000001 01000001 中 x 01001110 00101101 11100100 10111000 10101101 从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。 用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。 文件存取编码转换图 常用编码介绍一览表 编码 制定时间 作用 所占字节数 ASCII 1967年 表示英语及西欧语言 8bit/1bytes GB2312 1980年 国家简体中文字符集,兼容ASCII 2bytes Unicode 1991年 国际标准组织统一标准字符集 2bytes GBK 1995年 GB2312的扩展字符集,支持繁体字,兼容GB2312 2bytes UTF-8 1992年 不定长编码 1-3bytes
猜年龄的游戏,猜三次,超过三次则退出。点:循环次数的控制,分支控制,退出循环
age = 56 for i in range(3): inputage = int(input("请输入年龄:") ) if inputage == age : print('you got it') break if inputage > age : print('think samller') if inputage <age : print("think bigger") else : print("you have tied too many times")
python的列表(就是js中的数组,我老是忘记)和深浅copy
import copy a = [1,2,3,[4,5]] b = a print('a的内存地址:',id(a)) print('b的内存地址:',id(b)) a[3][1] = 10 b[3][0] = 200 print('a的值:%s'%a) print('b的值:%s'%b) #深copy c = [1,2,3,[4,5]] d = copy.deepcopy(c) e = c[:]#切片的方式生成 print('c的内存地址:',id(c)) print('d的内存地址:',id(d)) print('e的内存地址:',id(e)) c[3][1] = 10 d[3][0] = 200 print('c的值:%s'%c) print('d的值:%s'%d) #深copy是把c的值复制了之后,还同时指向了新的内存地址,所以两个变量的改变都是独立的,互不影响的
与js中数组不一样的是, python的列表下标可以是负数,-1即表示取倒数第一个
各种操作
1 # 切片操作(通过下标取一个或者多个的值,可以看做是字符串截取的加强版) 2 3 names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] 4 print('取下标1至下标4之间的数字,包括1,不包括4:',names[1:4]) #取下标1至下标4之间的数字,包括1,不包括4 5 print('取下标1至-1的值,不包括-1:',names[1:-1]) #取下标1至-1的值,不包括-1 6 print('从头开始取:',names[0:3]) 7 print('从头开始取,0可以忽略,跟上句效果一样:',names[:3]) #如果是从头开始取,0可以忽略,跟上句效果一样 8 print('#如果想取最后一个,必须不能写-1,只能这么写:',names[3:]) 9 print('这样-1就不会被包含了:',names[3:-1]) # 10 print('后面的2是代表,每隔一个元素,就取一个:',names[0::2]) # 11 print('后面的2是代表,每隔一个元素,就取一个,前面的0可以省略',names[::2]) #和上句效果一样 12 13 #append 追加 14 print('追加之前最后一个值:',names[-1]) 15 names.append('simon') 16 print('追加之后最后一个值:',names[-1]);#最后一个值变成了追加的值 17 18 #插入 insert 追加是在默认加到最后面,insert是有序的加入 19 print('before insert 【2】',names[2]) 20 names.insert(2,'占领原来下标为2的地盘') 21 print('after insert 【2】',names[2]) 22 23 #修改 24 print('before update 【2】',names[2]) 25 names[2] = '更新一下就好了' 26 print('after update 【2】',names[2]) 27 28 #删除 29 del names[2] #根据下标删除值 30 print(names) 31 names.remove('Amy') #删除指定元素,不同于js的删除,python的删除会连元素值和位置都删掉 32 names.pop() #删除最后一个元素 33 34 #两个列表合并 35 b = [1,2,3,'Alex'] 36 names.extend(b) 37 print(names) #把b中的元素都加入到names中,并且,并不会去重。 38 39 40 #统计 41 print(names.count('Alex')) #得到个2 42 43 #排序和翻转 44 names2 = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] 45 #执行 print(names2.sort()) 会报错,因为3.0+的python不能把str和int一起排序 46 names3 = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3'] 47 names3.sort() #排序 48 print(names3) 49 names3.reverse()#翻转 50 print(names3) 51 52 #获取下标 53 simon = ['simon','lily','penny','simon'] 54 print(simon.index('simon'))#只返回找到的第一个下标
python的元祖
1 #定义了之后不能单独修改或者增添元素,但可以整个再重新赋值,便不能再修改,又叫只读列表 2 #所以python的切片取值同样可以用于元祖 3 #这里是个随便的例子 4 n1 = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] 5 print(n1[1:4]) #取下标1至下标4之间的数字,包括1,不包括4 6 n2 = ("Alex","Tenglan","Eric","Rain","Tom","Amy") 7 print(n2[1:4])
python的字典
key-value的形式,类似json对象,json对象怎么玩,这就可以怎么玩
info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe Luola", 'stu1103': "XiaoZe Maliya", } #直接获取所有的keys,values print('keys:',info.keys()) print('values:',info.values()) #attention 通过keys找的时候,最好使用,因为直接获取的方式,在找不到的时候会报错 print(info.get('stu')) print(info('stu'))#这个会报错 #遍历 for simon in enumerate(info):#enumerate的自动加序号功能,有时候还是有用的,注意下 print(simon) for i,t in info.items():#会先把dict转成list,数据里大时莫用 print(i,t) #字典玩的比较6的话,就要做好三级菜单的作业了
python的集合
感觉不是很常用,copy下大王的代码以备不时之需
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”的一个浅复制
三级菜单
# -*- coding: utf-8 -*- menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } # 连续回上级的时候,要连续读取上级的上级的上级。我这里采用的是记录每次输入的目录名,返回的时候遍历出对应的目录 cur = menu # 记录当前节点下可选的目录 his = [] # 记录存在的输入历史 while 1: for list in cur: # 遍历打印可选目录 print(list) choose = input('输入exit退出程序,输入back返回上一层,请输入:').strip() if choose in cur: # 输入的内容存在的时候记录下,并更新当前目录 his.append(choose) cur = cur[choose] elif choose == 'back': # 输入back的时候,去掉记录的最后一笔记录,同时更新当前可选目录 if his:his.pop() temp = menu # his记录的是当前输入存在的总历史,遍历以读取当前目录 for i in his:temp = temp[i] cur = temp elif choose == 'exit':exit() # 输入exit的时候,退出程序
参考大王的博客整理:http://www.cnblogs.com/alex3714/articles/5717620.html