zoukankan      html  css  js  c++  java
  • 整理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

  • 相关阅读:
    第51月第8天 nsdata分割
    第50月第25天 TestFlight不可用
    第50月第16日 licode libnice owt
    第50月第13天 webrtc抗丢包与带宽自适应
    第50月第12天 LiveVideoStack
    第50月第3天 webrtc fec
    第49月第29天 WebRTC GN构建工具的使用
    第49月第20天 在Mac OS X上.dylib和.so之间的区别
    iOS开发总结(A0)- make table view more responsive
    iOS开发总结(A0)- block基础知识
  • 原文地址:https://www.cnblogs.com/Simonsun002/p/8511966.html
Copyright © 2011-2022 走看看