整理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
View Code



猜年龄的游戏,猜三次,超过三次则退出。点:循环次数的控制,分支控制,退出循环

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")
View Code

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的值复制了之后,还同时指向了新的内存地址,所以两个变量的改变都是独立的,互不影响的
View Code

与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'))#只返回找到的第一个下标
View Code

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])
View Code

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的话,就要做好三级菜单的作业了
View Code

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”的一个浅复制
View Code

 三级菜单

# -*- 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的时候,退出程序
View Code

参考大王的博客整理:http://www.cnblogs.com/alex3714/articles/5717620.html

原文地址:https://www.cnblogs.com/Simonsun002/p/8511966.html