zoukankan      html  css  js  c++  java
  • Day3 Pyhon的六大数据类型

    Python3 中有六个标准的数据类型:

    • Number(数字)
    • String(字符串)
    • List(列表)
    • Tuple(元组)
    • Sets(集合)
    • Dictionary(字典)

    Number(数字)

    Python3 支持 int【整型】、float【浮点型】、bool【布尔型】、complex(复数)

    int(整型): 如 1

      在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
      在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
    float(浮点型): 如 1.23
          先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html 
      浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示
          符号。
    bool(int的子类型):True or False
      在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是
          1 和 0,它们可以和数字相加。
    complex(复数):如 1 + 2j
      复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
    注:Python中存在小数字池:-5 ~ 257
     

    在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。

    像大多数语言一样,数值类型的赋值和计算都是很直观的。

    内置的 type() 函数可以用来查询变量所指的对象类型。

    1 a, b, c, d = 20, 5.5, True, 4+3j
    2 print(type(a), type(b), type(c), type(d))
    View Code

    此外还可以用 isinstance 来判断:

    1 a= 20
    2 data = isinstance(a, int)
    3 print(data)
    View Code

    isinstance 和 type 的区别在于:

    class A:
        pass
    
    class B(A):
        pass
    
    print(isinstance(A(), A)) # returns True
    print(type(A()) == A ) # returns True
    print(isinstance(B(), A)) # returns True
    print(type(B()) == A )# returns False
    View Code

    区别就是:

    • type()不会认为子类是一种父类类型。
    • isinstance()会认为子类是一种父类类型。

    注意:在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。

    您可以通过使用del语句删除单个或多个对象。。del语句的语法是:del var1[,var2[,var3[....,varN]]]]

    eg:

    1 var = 5
    2 del var
    3 print(var)
    View Code

    数值运算

    print(5 + 4)  # 加法
    print(4.3 - 2) # 减法
    print(3*7) # 乘法
    print(2/4)  # 除法,得到一个浮点数
    print(2 // 4)  # 除法,得到一个整数
    print(17 % 3)  # 取余
    print(2 ** 5) # 乘方
    View Code

    注意:

    • 1、Python可以同时为多个变量赋值,如a, b = 1, 2。
    • 2、一个变量可以通过赋值指向不同类型的对象。
    • 3、数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。
    • 4、在混合计算时,Python会把整型转换成为浮点数。
    • 5、在整数除法中,除法(/)总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 // 
    • 6、变量在使用前必须先"定义"(即赋予变量一个值),否则会出现错误

    总结:数值型的增删改查操作!

    随机数函数

    随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

    Python包含以下常用随机数函数:

    案例演示:

    import random
    poker = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    random.shuffle(poker)
    print(poker)
    #初次设定随机数种子
    random.seed (10)
    print(random.random())
    #这次没有设定随机数种子,会发现这两次的随机数是不一样的!
    print(random.random())
    
    #初次设定随机数种子
    random.seed (10)
    print(random.random())
    #再次次设定随机数种子,会发现这两次的随机数是一样的!
    random.seed (10)
    print(random.random())
    View Code

    三角函数:

    数学常量:

    String(字符串)

    字符串的定义:它是一个有序的字符的集合,用于存储和表示基本的文本信息,Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠()转义特殊字符。

    特性:按照从左到右的顺序定义字符集合,下标从0开始顺序访问,有序

     注意:

    Python 不支持单字符类型,单字符也在Python也是作为一个字符串使用。
    Python 访问子字符串,可以使用方括号来截取字符串

    字符串的截取的语法格式如下:

    变量[头下标:尾下标]

    加号 (+) 是字符串的连接符, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。实例如下:

    #!/usr/bin/python3
    
    str = 'Runoob'
    
    print (str)          # 输出字符串
    print (str[0:-1])    # 输出第一个个到倒数第二个的所有字符
    print (str[0])       # 输出字符串第一个字符
    print (str[2:5])     # 输出从第三个开始到第五个的字符
    print (str[2:])      # 输出从第三个开始的后的所有字符
    print (str * 2)      # 输出字符串两次
    print (str + "TEST") # 连接字符串

    执行以上程序会输出如下结果:

    Runoob
    Runoo
    R
    noo
    noob
    RunoobRunoob
    RunoobTEST
    View Code

    Python 使用反斜杠()转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串:

    print('Ru
    oob')
    print(r'Ru
    oob')

    输出结果为:

    Ru
    oob
    Ru
    oob
    View Code

    另外,反斜杠()可以作为续行符,表示下一行是上一行的延续。也可以使用 """...""" 或者 '''...''' 跨越多行。

    注意,Python 没有单独的字符类型,一个字符就是长度为1的字符串。

    代码:

    word = 'Python'
    print(word[0], word[5])
    print(word[-1], word[-6])
    View Code

    注意:

    • 1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
    • 2、字符串可以用+运算符连接在一起,用*运算符重复。但是字符串是不能和数值型直接拼接的,如果想要让字符串拼接,就先把数值型转换为字符串:print("dad"+str(123))
    • 3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
    • 4、Python中的字符串不能改变。
    • 5、python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

    字符串格式化输出

    name = "alex"
    print "i am %s " % name
       
    #输出: i am alex
    View Code

    PS: 字符串是 %s;整数 %d;浮点数%f

    字符串常用功能:
    • 移除空白【strip(),lstrip(),rstrip()】
    • 分割[split()]
    • 长度[len()]
    • 索引[index()]
    • 切片:  变量[头下标:尾下标]  0表示开始的位置,-1表示最后一个字母的位置

    字符串的其它函数:

    1.#dir()函数可以查看一个对象中可使用的方法和属性
    print(dir("ds"))
    
    2.#连接字符串
    sStr1 = 'strcat'
    sStr2 = 'append'
    sStr1 += sStr2
    print(sStr1)
    
    3.#比较字符串(==)
    print(“aaa”==“bbb” )
    
    4.字符串中的搜索和替换:
    S.find(substr, [start, [end]])   #返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索 
    S.index(substr, [start, [end]])   #与find()相同,只是在S中没有substr时,会返回一个运行时错误 
    S.rfind(substr, [start, [end]])   #返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号 
    S.rindex(substr, [start, [end]]) 
    S.count(substr, [start, [end]])    #计算substr在S中出现的次数 
    S.replace(oldstr, newstr, [count])    #把S中的oldstr替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换 
    S.strip([chars]) #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None 
    S.lstrip([chars]) 
    S.rstrip([chars]) 
    
    5.# 字符串的分割和组合:
    # S.split([sep, [maxsplit]]) #以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
    # S.join(seq) #把seq代表的序列──字符串序列,用S连接起来
    
    6.# 字符串中字符大小写的变换:
    # S.lower()   #小写
    # S.upper()   #大写
    # S.swapcase()   #大小写互换
    # S.capitalize()   #首字母大写
    
    7.# 字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:
    # S.startwith(prefix) #是否以prefix开头
    # S.endwith(suffix)  #以suffix结尾
    # S.isalnum()  #是否全是字母和数字
    # S.isalpha()  #是否全是字母
    # S.isdigit()  #是否全是数字
    # S.isspace() #是否全是空白字符
    # S.islower() #S中的字母是否全是小写
    # S.isupper() #S中的字母是否便是大写
    # S.istitle() #S是否是首字母大写的
    
    8.# 字符串编码和解码的函数(默认是UTF-8编码和解码):
    # S.encode([encoding]) # 其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。
    # S.decode([encoding])
    
    9.# python字符串与数字的转化
    # 数字变为字符串 str()
    # 字符串变为数字
    print(int("12"))
    print(float("12"))
    print(complex("12"))
    str=bool("12")
    print(type(str),str)
    View Code
    msg.index('a')  返回a所在字符串的索引

    python转义字符

    python的字符串运算符

    注意:Python三引号

    python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下:
    #!/usr/bin/python3
    
    para_str = """这是一个多行字符串的实例
    多行字符串可以使用制表符
    TAB ( 	 )。
    也可以使用换行符 [ 
     ]。
    """
    print (para_str)
    View Code

    List(列表)

    List(列表) 是 Python 中使用最频繁的数据类型。

    列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

    列表是写在方括号([])之间、用逗号分隔开的元素列表,列表的数据项不需要具有相同的类型。

    和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

    列表的创建,语法:

    name_list = ['alex', 'seven', 'eric']
    或
    name_list = list(['alex', 'egon', 'eric'])

    列表截取的语法格式如下:

    变量[头下标:尾下标]

    索引值以 0 为开始值,-1 为从末尾的开始位置。

    加号(+)是列表连接运算符,星号(*)是重复操作。如下实例:

    list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
    tinylist = [123, 'runoob']
    
    print (list)            # 输出完整列表
    print (list[0])         # 输出列表第一个元素
    print (list[1:3])       # 从第二个开始输出到第三个元素
    print (list[2:])        # 输出从第三个元素开始的所有元素
    print (tinylist * 2)    # 输出两次列表
    print (list + tinylist) # 连接列表
    View Code

    以上实例输出结果:

    ['abcd', 786, 2.23, 'runoob', 70.2]
    abcd
    [786, 2.23]
    [2.23, 'runoob', 70.2]
    [123, 'runoob', 123, 'runoob']
    ['abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob']
    View Code

    与Python字符串不一样的是,列表中的元素是可以改变的:

    a = [1, 2, 3, 4, 5, 6]
    a[0] = 9
    a[2:5] = [13, 14, 15]
    print(a)
    a[2:5] = []   # 删除
    print(a)
    View Code

    结果如下:

    [9, 2, 13, 14, 15, 6]
    [9, 2, 6]
    View Code

    List内置了有很多方法,例如append()、pop()等等,这在后面会讲到。

    注意:

    • 1、List写在方括号之间,元素用逗号隔开。
    • 2、和字符串一样,list可以被索引和切片。
    • 3、List可以使用+操作符进行拼接.
    • 4、List中的元素是可以改变的。
    • 5、List中的元素是有序的。

    列表操作:

    1.增加、追加:

    insert
        功能:在指定索引位置的元素前面插入新的元素
        name = ['sd','dfdf','drer',['sddss','sdsdsd']]
        name.insert(3,'sd')
        返回结果:name
        ['sd', 'dfdf', 'drer', 'sd', ['sddss', 'sdsdsd']]
    append
        功能:列表追加元素
        name = ['sd','dfdf','drer']
        name.append('sdsd')
        返回结果:name
                ['sd', 'dfdf', 'drer', 'sdsd']
    
    extend
        功能:追加字符元素或列表元素
        name = ['sd','dfdf','drer',['sddss','sdsdsd']]
        li = ['sd','sdsds',['sd','dffdg',],]
        name.extend('ss')
        返回结果:name
        ['sd', 'dfdf', 'drer', ['sddss', 'sdsdsd'], 's', 's']
        name.extend('d')
        返回结果:name
        ['sd', 'dfdf', 'drer', ['sddss', 'sdsdsd'], 's', 's', 'd']
        name.extend(li)
        返回结果:name
        ['sd', 'dfdf', 'drer', ['sddss', 'sdsdsd'], 's', 's', 'd', 'sd', 'sdsds', ['sd', 'dffdg']]
    View Code

    2.删除指定元素,删除指定的第几个元素,清空

    pop
        功能:删除指定索引值的元素,返回值为当前删除的元素的值。不指定索引值,默认删除最后一个元素
        name = ['sd','dfdf','drer',['sddss','sdsdsd']]
        name.pop(3)
        返回结果:'sd'
    remove
        功能:删除列表中指定的元素
        name = ['sd','dfdf','drer',['sddss','sdsdsd']]
        name.remove('sd')
        name
        返回结果:['dfdf', 'drer', ['sddss', 'sdsdsd']]
    
    clear
        功能:情况列表元素
        name = ['sd','dfdf','drer']
        name.clear()
        返回结果:name
    View Code

    3.查索引,查,利用切片查

    index
        功能:定位列表中某元素
        name = ['sd','dfdf','drer',['sddss','sdsdsd']]
        print(name.index('sd'))
        返回结果:0
        返回结果:name.index('dr')  #当出现某元素不在列表中的时候会直接报错
                Traceback (most recent call last):
                  File "<stdin>", line 1, in <module>
                ValueError: 'dr' is not in list
    
    count
        功能:统计列表指定元素个数
        name = ['sd','dfdf','drer',['sddss','sdsdsd']]
        name.count('sd')
        返回结果:1
        li = ['sd','sdsds',['sd','dffdg',],]
        li.count('sd') #只统计第一层的元素个数
        返回结果:1
    
    利用切片查:
        变量[头下标:尾下标]
        索引值以 0 为开始值,-1 为从末尾的开始位置。
    View Code

    4.包含、遍历、反向列表、拷贝【浅拷贝,深拷贝】

    #包含、不包含(in ,not in )
    list = ['a','b','c']
    if 'a' in list:
        print('a in the list')
    
    if 'd' not in list:
        print('d is not in the list')
    
    # for 语句
    for i in list:
        print(i)
    
    #reverse() 将列表中的元素逆序
    name = ['sd','dfdf','drer',['sddss','sdsdsd']]
    name.reverse()
    print(name)
    
    # copy(), 功能:浅拷贝,即只拷贝第一层的元素
    name = ['sd', 'dfdf', 'drer']
    li = ['ssd']
    li = name.copy()
    print(li)
    # copy(), 功能:深拷贝,即只拷贝第一层的元素
    name = ['sd', 'dfdf', 'drer', ['sddss', 'sdsdsd']]
    li = ['ssd']
    li = name.copy()
    print(li)
    View Code

    Python包含以下函数

    代码演示:

    list01 = [1,3,6,2]
    tuple01 = tuple((1,2,3))
    print(len(list01))
    print(max(list01))
    print(min(list01))
    print(list(tuple01))
    View Code

     python中的方法:

    元组(不可变列表,有序,元素可重复)

    元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。

    元组中的元素类型也可以不相同:

    创建元组:

    ages = (11, 22, 33, 44, 55)
    或
    ages = tuple((11, 22, 33, 44, 55))

    构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:

    tup1 = ()    # 空元组
    tup2 = (20,) # 一个元素,需要在元素后添加逗号,如果不加这个逗号,运行的时候,就会发现而不是一个元组,而是一个数值,可以用type来验证!
    
                  #这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
    View Code

    元组的读取、截取、连接

    tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2  )
    tinytuple = (123, 'runoob')
    
    print (tuple)             # 输出完整元组
    print (tuple[0])          # 输出元组的第一个元素
    print (tuple[1:3])        # 输出从第二个元素开始到第三个元素
    print (tuple[2:])         # 输出从第三个元素开始的所有元素
    print (tinytuple * 2)     # 输出两次元组
    print (tuple + tinytuple) # 连接元组
    View Code

    元组与字符串类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取(看上面,这里不再赘述)。其实,可以把字符串看作一种特殊的元组。

    注意:tup[0] = 11 # 修改元组元素的操作是非法的

    虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表,如下所示:

    tuple1=(1,2,3,4,["dfa","adf"])
    print(tuple1)
    tuple1[4].append("张三")
    print(tuple1)
    View Code

    删除元组
    元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组

    tup = ('physics', 'chemistry', 1997, 2000);
    del tup;
    print(tup)#会报错
    View Code

    注意:

    • 1、与字符串一样,元组的元素不能修改。
    • 2、元组也可以被索引和切片,方法一样。
    • 3、注意构造包含0或1个元素的元组的特殊语法规则。
    • 4、元组也可以使用+操作符进行拼接。
    • 5、元组中的元素值是不允许修改的,但我们可以对元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
    • 6、它只有2个方法,一个是count,一个是index,完毕。

    tuple的意义:

        不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来。

     元组运算符:

    元组内置函数:

    程序练习 

    程序:购物车程序

    需求:

    1. 启动程序后,让用户输入工资,然后打印商品列表
    2. 允许用户根据商品编号购买商品
    3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
    4. 可随时退出,退出时,打印已购买商品和余额

    集合:可变/不可变集合

    集合的基本功能: 进行成员关系测试和删除重复元素。

    1.可变集合

    集合(set)是一个无序不重复元素的序列。

    可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 

    可变集合的创建:

    #创建集合的第一种方式:
    student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    print(student)   # 输出集合,重复的元素被自动去掉
    print(type(student))
    #创建集合的第二种方式:
    stu = set((1,"23",23))
    print(stu)
    print(type(stu))
    View Code

    不可变集合的创建:

    ##创建集合的第三种方式:(严格意义上讲第一种和第二种是一致的,都是可变集合)
    cons_set = frozenset(['b','h','h','k','o','p','s'])
    print(cons_set)
    print(type(cons_set))
    View Code

    可变集合的修改:

    student = {'Tom', 'Jim', 'Mary', 'Jack', 'Rose'}
    student.add("dad")#添加
    student.update("abc") #添加 ,将整体拆分,将每一部分都作为集合整体的一部分!
    student.remove("Tom") #删除
    print(student)
    
    stu = set((1,"23",23))
    stu.add("python")
    stu.update("45")
    stu.remove(23)
    print(stu)
    View Code

    不可变集合的修改:

    # 只有可变集合能被修改。试图修改不可变集合会引发异常。
    cons_set = frozenset(['b','h','h','k','o','p','s'])
    cons_set.add('z')
    View Code

    注意:只有可变集合能被修改。试图修改不可变集合会引发异常。

    可变集合与不可变集合的删除:

    student = {'Tom', 'Jim', 'Mary', 'Jack', 'Rose'}
    del student
    
    stu = set((1,"23",23))
    del stu
    
    cons_set = frozenset(['b','h','h','k','o','p','s'])
    del cons_set
    View Code

    成员关系:

    student = {'Tom', 'Jim', 'Mary', 'Jack', 'Rose'}
    print('Tom' in student)
    
    stu = set((1,"23",23))
    print(23 in stu)
    
    cons_set = frozenset(['b','h','h','k','o','p','s'])
    print("b" in cons_set)
    View Code
    集合等价、不等价:
    #集合是否等价
    student = {'Tom', 'Jim', 'Mary', 'Jack', 'Rose'}
    stu = set(('Tom', 'Jim', 'Mary', 'Jack', 'Rose'))
    print(stu != student)
    print(student == stu)
    
    cons_set = frozenset(['b','h','h','k','o','p','s'])
    print(student == cons_set)
    View Code
    可变集合与不可变之间的相互转化
    #可变集合与不可变之间的相互转化
    stu = set(('Tom', 'Jim', 'Mary', 'Jack', 'Rose'))
    s = frozenset(stu)
    print(type(s))
    cons_set = frozenset(['b','h','h','k','o','p','s'])
    s = set(cons_set)
    print(type(s))
    View Code

    集合操作与关系符号

    注意:混合集合类型操作

    左右两个操作数的类型不相同(左操作数是 set,右操作数是 frozenset,或相反情况),则所产生的结果类型与左操作数的类型相同。如下:
    student = {'Tom', 'Jim', 'Mary', 'Jack', 'Rose'}
    f = frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
    
    st= student -f
    print(st)
    print(type(st))
    View Code
    遍历访问集合中的值(可变集合和非可变都支持)
    #遍历访问集合中的值(可变集合和非可变都支持)
    student = {'Tom', 'Jim', 'Mary', 'Jack', 'Rose'}
    for i in student:
         print(i)
    View Code

    字典

    字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

    列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。

    键(key)必须使用不可变类型。

    在同一个字典中,键(key)必须是唯一的,键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

    语法:

    info = {
        'stu1101': "TengLan Wu",
        'stu1102': "LongZe Luola",
        'stu1103': "XiaoZe Maliya",
    }

    注意:

    • 1、字典是一种映射类型,它的元素是键值对。
    • 2、字典的关键字必须为不可变类型,且不能重复【so 天生去重】。
    • 3、创建空字典使用 { }
    • 4、dict是无序的

    Note: string、sets,list和tuple都属于sequence(序列)。

    字典的操作:

    增加:

    info = {
        'stu1101': "TengLan Wu",
        'stu1102': "LongZe Luola",
        'stu1103': "XiaoZe Maliya",
    }
    info["stu1104"] = "苍井空"
    print(info)
    View Code

    修改:

    info = {
        'stu1101': "TengLan Wu",
        'stu1102': "LongZe Luola",
        'stu1103': "XiaoZe Maliya",
    }
    info["stu1101"] = "11"
    print(info)
    View Code

    删除:

     1 info = {
     2     'stu1101': "TengLan Wu",
     3     'stu1102': "LongZe Luola",
     4     'stu1103': "XiaoZe Maliya",
     5 }
     6 
     7 info.pop("stu1101") #标准删除姿势
     8 print(info)
     9 del info["stu1102"] #换个姿势删除
    10 print(info)
    11 info.popitem()  #随机删除
    12 print(info)
    View Code

    查找:

    info = {
        'stu1101': "TengLan Wu",
        'stu1102': "LongZe Luola",
        'stu1103': "XiaoZe Maliya",
    }
    #查找:
    "stu1102" in info #标准用法
    info.get("stu1102")  # 获取
    info["stu1102"] #获取,如果一个key不存在,就报错,get不会,不存在只返回None
    View Code

    多级字典嵌套及操作:

     1 av_catalog = {
     2     "欧美":{
     3         "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
     4         "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
     5         "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
     6         "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
     7     },
     8     "日韩":{
     9         "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    10     },
    11     "大陆":{
    12         "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    13     }
    14 }
    15 
    16 av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
    17 print(av_catalog["大陆"]["1024"])
    View Code

    其它操作:

     1 info = {
     2     'stu1101': "TengLan Wu",
     3     'stu1102': "LongZe Luola",
     4     'stu1103': "XiaoZe Maliya",
     5 }
     6 #获取字典的键
     7 print(info.keys())
     8 #获取字典的值
     9 print(info.values())
    10 #setdefault(key,value)没有对应的键,就添加,否则保持原来的!
    11 info.setdefault("stu1106","Alex")
    12 print(info)
    13 info.setdefault("stu1102","龙泽萝拉")
    14 print(info)
    15 b = {1: 2, 3: 4, "stu1102": "龙泽萝拉"}
    16 #update方法是:没有对应的键就添加,有对应的键就修改
    17 info.update(b)
    18 print(info)
    19 #info.items()会将字典的值以元组列表的形式返回
    20 print(info.items())
    21 
    22 #通过一个列表生成默认dict,少用吧这个
    23 data = dict.fromkeys([1,2,3],'testd')
    24 print(data)
    View Code

    循环遍历:

     1 info = {
     2     'stu1101': "TengLan Wu",
     3     'stu1102': "LongZe Luola",
     4     'stu1103': "XiaoZe Maliya",
     5 }
     6 #方法1
     7 for key in info:
     8     print(key,info[key])
     9 
    10 #方法2
    11 for k,v in info.items(): #会先把dict转成list,数据里大时莫用
    12     print(k,v)
    View Code

    判断一个键是否在字典中用in或not in,例如:

    if “name” in students:print(students["name"])
    "age" not in students:print("不存在age")
    

    需要注意的是:字典中不允许使用+,*进行拼接或重复操作!

    字典中的方法:

    注意:上面的fromkeys()方法的格式是有问题的,正确的格式如下:

    dict.fromkeys(seq[, value]))

    参数

    • seq -- 字典键值列表。
    • value -- 可选参数, 设置键序列(seq)的值。

    返回值

    该方法返回列表。

    代码演示:

    seq = ('name', 'age', 'sex')
    
    dict = dict.fromkeys(seq)
    print("New Dictionary : %s" %  str(dict))
    
    dict = dict.fromkeys(seq, 10)
    print("New Dictionary : %s" %  str(dict)
    View Code

    程序练习

    程序: 三级菜单

    要求: 

    1. 打印省、市、县三级菜单
    2. 可返回上一级
    3. 可随时退出程序
     1 menu = {
     2     '北京':{
     3         '海淀':{
     4             '五道口':{
     5                 'soho':{},
     6                 '网易':{},
     7                 'google':{}
     8             },
     9             '中关村':{
    10                 '爱奇艺':{},
    11                 '汽车之家':{},
    12                 'youku':{},
    13             },
    14             '上地':{
    15                 '百度':{},
    16             },
    17         },
    18         '昌平':{
    19             '沙河':{
    20                 '老男孩':{},
    21                 '北航':{},
    22             },
    23             '天通苑':{},
    24             '回龙观':{},
    25         },
    26         '朝阳':{},
    27         '东城':{},
    28     },
    29     '上海':{
    30         '闵行':{
    31             "人民广场":{
    32                 '炸鸡店':{}
    33             }
    34         },
    35         '闸北':{
    36             '火车战':{
    37                 '携程':{}
    38             }
    39         },
    40         '浦东':{},
    41     },
    42     '山东':{},
    43 }
    44 
    45 
    46 exit_flag = False
    47 current_layer = menu
    48 
    49 layers = [menu]
    50 
    51 while not  exit_flag:
    52     for k in current_layer:
    53         print(k)
    54     choice = input(">>:").strip()
    55     if choice == "b":
    56         current_layer = layers[-1]
    57         #print("change to laster", current_layer)
    58         layers.pop()
    59     elif choice not  in current_layer:continue
    60     else:
    61         layers.append(current_layer)
    62         current_layer = current_layer[choice]
    三级菜单文艺青年版

     叨叨+作业:

    为什么会查询速度会快呢?因为他是hash类型的,那什么是hash呢?

    哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法

    dict会把所有的key变成hash 表,然后将这个表进行排序,这样,你通过data[key]去查data字典中一个key的时候,python会先把这个key hash成一个数字,然后拿这个数字到hash表中看没有这个数字, 如果有,拿到这个key在hash表中的索引,拿到这个索引去与此key对应的value的内存地址那取值就可以了。

    上面依然没回答这样做查找一个数据为什么会比列表快,对不对? 呵呵,等我课上揭晓。




  • 相关阅读:
    OI竞赛常见错误总结
    lis最长上升子序列o(nlogn)优化
    链表及其简单应用
    栈及其简单应用
    哈希表Hash:概念与基本操作
    队列及其简单应用
    poj1418 Viva Confetti 判断圆是否可见
    poj1981 Circle and Points 单位圆覆盖问题
    poj2187 Beauty Contest(旋转卡壳)
    poj2932 Coneology (扫描线)
  • 原文地址:https://www.cnblogs.com/python-machine/p/6825042.html
Copyright © 2011-2022 走看看