• python基本数据结构


    列表list

    序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

    Python有6个序列的内置类型,但最常见的是列表和元组,包括前面所介绍的字符串。字符串是字符的序列,列表和元组则是任意python数据类型或对象的序列。

    序列都可以进行的操作包括索引,切片,加,乘,检查成员。

    此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

    列表的数据项不需要具有相同的类型

    list1 = ['Google', 'Runoob', 1997, 2000];
    list2 = [1, 2, 3, 4, 5 ];
    list3 = ["a", "b", "c", "d"];
    list4 = list()
    print(list4)
    
    []
    

    访问列表中的值

    与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

    list1 = ['Google', 'Runoob', 1997, 2000]
    list2 = [1, 2, 3, 4, 5, 6, 7 ]
     
    print ("list1[0]: ", list1[0])
    print ("list2[1:5]: ", list2[1:5])
    
    list1[0]:  Google
    list2[1:5]:  [2, 3, 4, 5]
    

    更新列表

    你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示

    list1 = ['Google', 'Runoob', 1997, 2000]
     
    print ("第三个元素为 : ", list1[2])
    list1[2] = 2001
    print ("更新后的第三个元素为 : ", list1[2])
    
    第三个元素为 :  1997
    更新后的第三个元素为 :  2001
    
    a  =[1,2,3]
    print(a,id(a))
    b = a #赋值引用,a 和 b 都指向同一个对象
    a[1] =555
    print(b,id(b))
    
    a  =[1,2,3]
    print(a,id(a))
    b = a[:]
    a[1] =555
    print(b,id(b))
    
    
    a  =[1,2,3]
    print(a,id(a))
    b = a
    a = [1,2]
    print(a,id(a))
    print(b,id(b))
    
    [1, 2, 3] 139941048300424
    [1, 555, 3] 139941048300424
    [1, 2, 3] 139941047707400
    [1, 2, 3] 139941048237448
    [1, 2, 3] 139941048235336
    [1, 2] 139941048300424
    [1, 2, 3] 139941048235336
    

    删除列表元素

    可以使用 del 语句来删除列表的的元素,如下实例:

    list1 = ['Google', 'Runoob', 1997, 2000]
     
    print ("原始列表 : ", list)
    del list1[2]
    print ("删除第三个元素 : ", list1)
    
    原始列表 :  ['Google', 'Runoob', 1997, 2000]
    删除第三个元素 :  ['Google', 'Runoob', 2000]
    

    列表脚本操作符

    列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

    Python 表达式结果描述
    len([1, 2, 3]) 3 长度
    [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
    [‘Hi!’] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] 重复
    3 in [1, 2, 3] True 元素是否存在于列表中
    for x in [1, 2, 3]: print(x, end=" ") 1 2 3 迭代
    squares = [1, 4, 9, 16, 25]
    squares += [36, 49, 64, 81, 100]
    squares
    
    
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    
    len([1, 2, 3]) 	
    
    3
    
    ['Hi!'] * 4 
    
    ['Hi!', 'Hi!', 'Hi!', 'Hi!']
    
    for x in [1, 2, 3]: print(x, end=" ") 
    
    1 2 3 
    

    列表截取与拼接

    Python的列表截取与字符串操作类型,如下所示:

    alist = [0,1,2,3,4,5,6,7]
    

    操作:

    Python 表达式结果描述
    alist[2] 2 读取第三个元素
    alist[-2] 6 从右侧开始读取倒数第二个元素: count from the right
    alist[1:] [1, 2, 3, 4, 5, 6, 7] 输出从第二个元素开始后的所有元素
    alist[::-1] [7, 6, 5, 4, 3, 2, 1, 0] 从右到左取全部成员
    alist[::2] [0, 2, 4, 6] 每隔1取一个成员
    alist[5:0:-2] [5, 3, 1] 从5至0(不包括0)从右至左每隔一个成员取一个成员
    alist = [0,1,2,3,4,5,6,7]
    print(alist[2])
    print(alist[-2])
    print(alist[1:])
    
    print(alist[::-1])#从右到左取全部成员
    print(alist[::2])      #每隔1取一个成员
    print(alist[0:5:2])   #从0至4每隔一个取一项
    print(alist[5:0:-2])   #从5至0(不包括0)从右至左每隔一个成员取一个成员
    
    2
    6
    [1, 2, 3, 4, 5, 6, 7]
    [7, 6, 5, 4, 3, 2, 1, 0]
    [0, 2, 4, 6]
    [0, 2, 4]
    [5, 3, 1]
    

    嵌套列表

    a = ['a', 'b', 'c']
    n = [1, 2, 3]
    x = [a, n]
    print(x)
    print(x[0])
    print(x[0][1])
    
    [['a', 'b', 'c'], [1, 2, 3]]
    ['a', 'b', 'c']
    b
    
    • 直接赋值:其实就是对象的引用(别名)。
    • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
    • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

    b = a: 赋值引用,a 和 b 都指向同一个对象

    b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)

    b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的

    直接赋值

    names = ["4ZhangYang", "#!Guyun","xXiangPeng",["alex","jack"],"ChenRonghua","XuLiangchen"]
    name2 = names
    print(names,id(names))
    print(name2,id(name2))
    names[2] = "向鹏"
    names[3][0] ="ALEXANDER"
    print(names,id(names))
    print(name2,id(name2))
    name2[3][0] ="ALEX"
    print(names,id(names))
    print(name2,id(name2))
    
    
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629997780296
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629997780296
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629997780296
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629997780296
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEX', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629997780296
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEX', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629997780296
    

    浅拷贝

    只拷贝第一层,拷贝地是子列表的内存地址

    
    names = ["4ZhangYang", "#!Guyun","xXiangPeng",["alex","jack"],"ChenRonghua","XuLiangchen"]
    name2 = names.copy()
    print(names,id(names))
    print(name2,id(name2))
    
    
    names[2] = "向鹏"
    names[3][0] ="ALEXANDER"
    print(names,id(names))
    print(name2,id(name2))
    name2[3][0] ="ALEX"
    print(names,id(names))
    print(name2,id(name2))
    
    
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998662280
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998080968
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998662280
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998080968
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEX', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998662280
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['ALEX', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998080968
    

    深拷贝

    import copy
    
    names = ["4ZhangYang", "#!Guyun","xXiangPeng",["alex","jack"],"ChenRonghua","XuLiangchen"]
    name2 = copy.deepcopy(names)
    print(names,id(names))
    print(name2,id(name2))
    
    names[2] = "向鹏"
    names[3][0] ="ALEXANDER"
    print(names,id(names))
    print(name2,id(name2))
    name2[3][0] ="ALEX"
    print(names,id(names))
    print(name2,id(name2))
    
    
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998080968
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139630060941768
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998080968
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139630060941768
    ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139629998080968
    ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['ALEX', 'jack'], 'ChenRonghua', 'XuLiangchen'] 139630060941768
    

    列表函数&方法

    列表函数

    序号函数解释
    1 len(list) 列表元素个数
    2 max(list) 返回列表元素最大值
    3 min(list) 返回列表元素最小值
    4 list(seq) 将元组转换为列表
    5 sorted(list) 列表排序
    6 zip(list1,list2) 将列表元素逐一配对
    7 all(list) list中所有项为真,则返回真,否则返回假
    8 any(list) list中有一项为真,则返回真,否则返回假
    9 enumerate(list) 将可迭代对象的每一个元素与其对应的索引值组成一个元组并返回

    sorted(iterable, cmp=None, key=None, reverse=False)

    • iterable:是可迭代类型;
    • cmp:用于比较的函数,比较什么由key决定;
    • key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
    • reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
    sorted([36,6,-12,9,-22])  
    
    [-22, -12, 6, 9, 36]
    
    sorted([36,6,-12,9,-22],key=abs) #高阶函数,以绝对值大小排序
    
    [6, 9, -12, -22, 36]
    
    a = [('b',2), ('a',1), ('c',0)]
    list(sorted(a,key=lambda x:x[1]))   #按照元组第二个元素排序
    
    [('c', 0), ('a', 1), ('b', 2)]
    
    list(sorted(a,key=lambda x:x[0]))   #按照元组第一个元素排序
    
    [('a', 1), ('b', 2), ('c', 0)]
    
    sorted(['bob', 'about', 'Zoo', 'Credit'],key=str.lower) #忽略大小写排序
    
    ['about', 'bob', 'Credit', 'Zoo']
    
    sorted(['bob', 'about', 'Zoo', 'Credit'],key=str.lower,reverse=True) #反向排序
    
    ['Zoo', 'Credit', 'bob', 'about']
    
    from operator import itemgetter, attrgetter 
    students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]  
    print(sorted(students, key=itemgetter(0)) )
    sorted(students, key=itemgetter(1,2))  
    
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    
    
    
    
    
    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
    

    zip

    list_1 = [1,2,3]
    list_2 = ['a','b','c']
    tuple1 = ('sun','cheng','quan')
    s = zip(list_1,list_2)
    a = list(s)
    print(a)
    print(list(zip(*a)))
    
    list(zip(list_1,list_2,tuple1))
    
    [(1, 'a'), (2, 'b'), (3, 'c')]
    [(1, 2, 3), ('a', 'b', 'c')]
    
    
    
    
    
    [(1, 'a', 'sun'), (2, 'b', 'cheng'), (3, 'c', 'quan')]
    

    len

    list1 = [ 'Runoob', 'Taobao','Google']
    print (len(list1))
    
    c = (i for i in range(5))
    print(type(c))
    list2 = list(range(5)) 
    print (type(list2),len(list2))
    
    
    3
    <class 'generator'>
    <class 'list'> 5
    

    all /any

    alist = [0,1,2,3]
    print(all(alist) )
    print(any(alist) )
    
    False
    True
    

    enumerate

    list1 = [4,2,6,56,9]
    print(enumerate(list1))
    print(list(enumerate(list1)))
    
    <enumerate object at 0x7efe246bac60>
    [(0, 4), (1, 2), (2, 6), (3, 56), (4, 9)]
    

    列表方法

    序号方法解释
    1 list.append(obj) 在列表末尾添加新的对象
    2 list.count(obj) 统计某个元素在列表中出现的次数
    3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
    5 list.insert(index, obj) 将对象插入列表
    6 list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    7 list.remove(obj) 移除列表中某个值的第一个匹配项
    8 list.reverse() 反向列表中元素
    9 list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序
    10 list.clear() 清空列表
    11 list.copy() 复制列表
    alist = [1,2,3,4,5]     #建立一个列表
    alist.append(1)         #列表尾部追加元素1
    alist
    
    [1, 2, 3, 4, 5, 1]
    
    alist.count(1)          #统计1在列表中出现次数
    
    2
    
    alist.extend([2,'chengquan'])  #列表后追加另一个列表所有元素
    alist
    
    [1, 2, 3, 4, 5, 1, 2, 'chengquan']
    
    alist.index(2)                  #元素2在列表中首先出现序号
    
    1
    
    alist.insert(3,'sun')           #在序号3处插入元素‘sun’
    alist
    
    [1, 2, 3, 'sun', 4, 5, 1, 2, 'chengquan']
    
    alist.pop()                      #返回并删除列表最后一个元素
    
    'chengquan'
    
    alist
    
    [1, 2, 3, 'sun', 4, 5, 1, 2]
    
    alist.remove(1)                   #删除列表中的元素1(仅删除第一个)
    alist
    
    
    [2, 3, 'sun', 4, 5, 1, 2]
    
    alist.reverse()                   #列表内元素顺序颠倒
    alist
    
    [2, 1, 5, 4, 'sun', 3, 2]
    

    列表推导式

    multiples = [i for i in range(30) if i % 3 is 0]
    print(multiples)
    
    [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
    

    元组tuple

    元组与列表类似,不同之处在于元组的元素不能修改。

    元组使用小括号,列表使用方括号。

    不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple

    元组创建

    元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

    tup1 = ('Google', 'Runoob', 1997, 2000);
    tup2 = (1, 2, 3, 4, 5 );
    tup3 = "a", "b", "c", "d";   #  不需要括号也可以
    
    print(type(tup3))
    print(tup3)
    
    2,3 #直接用逗号隔开的两个值,可以创建一个元组
    
    <class 'tuple'>
    ('a', 'b', 'c', 'd')
    
    
    
    
    
    (2, 3)
    

    创建空元组

    tup1 = ()
    tup1
    
    ()
    

    元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用

    tup1 = (50)
    print(type(tup1))    # 不加逗号,类型为整型
    
     
    tup1 = (50,)
    print(type(tup1))    # 加上逗号,类型为元组
    
    <class 'int'>
    <class 'tuple'>
    
    x,y = 2,3
    print(x,y)
    x,y=y,x #交换x与y的值(本质上右边是一个元组)
    y,x 
    x,y
    
    2 3
    
    
    
    
    
    (3, 2)
    

    访问元组

    元组可以使用下标索引来访问元组中的值,如下实例:

    up1 = ('Google', 'Runoob', 1997, 2000)
    tup2 = (1, 2, 3, 4, 5, 6, 7 )
     
    print ("tup1[0]: ", tup1[0])
    print ("tup2[1:5]: ", tup2[1:5])
    
    tup1[0]:  50
    tup2[1:5]:  (2, 3, 4, 5)
    

    修改元组

    元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

    tup1 = (12, 34.56);
    tup2 = ('abc', 'xyz')
     
    # 以下修改元组元素操作是非法的。
    # tup1[0] = 100
     
    # 创建一个新的元组
    tup3 = tup1 + tup2;
    print (tup3)
    
    (12, 34.56, 'abc', 'xyz')
    

    删除元组

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

    tup = ('Google', 'Runoob', 1997, 2000)
     
    print (tup)
    del tup;
    print ("删除后的元组 tup : ")
    print (tup)
    
    ('Google', 'Runoob', 1997, 2000)
    删除后的元组 tup : 
    
    
    
    ---------------------------------------------------------------------------
    
    NameError                                 Traceback (most recent call last)
    
    <ipython-input-31-cc087dd11595> in <module>
          4 del tup;
          5 print ("删除后的元组 tup : ")
    ----> 6 print (tup)
    
    
    NameError: name 'tup' is not defined
    

    元组运算符

    与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组

    Python 表达式结果描述
    len((1, 2, 3)) 3 计算元素个数
    (1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 连接
    (‘Hi!’,) * 4 (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) 复制
    3 in (1, 2, 3) True 元素是否存在
    for x in (1, 2, 3): print (x,) 1 2 3 迭代

    元组索引,截取

    Python 表达式结果描述
    L[2] ‘Runoob’ 读取第三个元素
    L[-2] ‘Taobao’ 反向读取;读取倒数第二个元素
    L[1:] (‘Taobao’, ‘Runoob’) 截取元素,从第二个开始后的所有元素

    元组内置函数

    len(tuple)

    计算元组元素个数

    tuple1 = ('Google', 'Runoob', 'Taobao')
    len(tuple1)
    
    3
    

    max(tuple)

    返回元组中元素最大值

    tuple2 = ('5', '4', '8')
    max(tuple2)
    
    '8'
    

    min(tuple)

    返回元组中元素最小值

    tuple2 = ('5', '4', '8')
    min(tuple2)
    
    '4'
    

    tuple(seq)

    将列表转换为元组

    list1= ['Google', 'Taobao', 'Runoob', 'Baidu']
    tuple1=tuple(list1)
    tuple1
    
    ('Google', 'Taobao', 'Runoob', 'Baidu')
    

    字典(dictionary)

    dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

    为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

    第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。

    和list比较,dict有以下几个特点:

    • 查找和插入的速度极快,不会随着key的增加而变慢;
    • 需要占用大量的内存,内存浪费多。

    而list相反:

    • 查找和插入的时间随着元素的增加而增加;
    • 占用空间小,浪费内存很少。

    所以,dict是用空间来换取时间的一种方法。

    创建

    {}            #建立空字典
    
    {}
    
    dict()        #建立空字典
    
    {}
    
    adict = {'a':1, 'b':2, 'c':'sunchengquan'}
    
    adict['c']    #用键名引用成员
    
    'sunchengquan'
    

    访问字典里的值

    adict = {'a':'sun','b':'cheng','c':'quan'}
    print ("adict['a']: ", adict['a'])
    print ("adict['b']: ", adict['b'])
    
    adict['a']:  sun
    adict['b']:  cheng
    

    修改字典

    向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例

    adict = {'a':'sun','b':'cheng','c':'quan','age':27}
    
    adict['age'] = 28;               # 更新 Age
    adict['school'] = "lzu"  # 添加信息
     
    print ("adict['Age']: ", adict['age'])
    print ("adict['School']: ", adict['school'])
    
    adict['Age']:  28
    adict['School']:  lzu
    

    删除字典元素

    能删单一的元素也能清空字典,清空只需一项操作。

    显示删除一个字典用del命令,如下实例:

    adict = {'a':'sun','b':'cheng','c':'quan','age':27,'school':"lzu" }
    
    del adict['a'] # 删除键 'Name'
    # adict.clear()     # 清空字典
    # del adict         # 删除字典
    
    print ("adict['age']: ", adict['age'])
    print ("adict['school']: ", adict['school'])
    
    adict['age']:  27
    adict['school']:  lzu
    

    字典键的特性

    1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例

    adict = {'a':'sun','b':'cheng','c':'quan','age':27,'school':"lzu" ,'age':28}
    print ("adict['age']: ", adict['age'])
    
    adict['age']:  28
    

    2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:

    adict = {['a']:'sun','b':'cheng','c':'quan','age':27,'school':"lzu" ,'age':28}
    adict
    
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    <ipython-input-58-e4143dbffaef> in <module>
    ----> 1 adict = {['a']:'sun','b':'cheng','c':'quan','age':27,'school':"lzu" ,'age':28}
          2 adict
    
    
    TypeError: unhashable type: 'list'
    
    adict = {('a',):'sun','b':'cheng','c':'quan','age':27,'school':"lzu" ,'age':28}
    adict
    
    {('a',): 'sun', 'b': 'cheng', 'c': 'quan', 'age': 28, 'school': 'lzu'}
    

    字典内置函数&方法

    字典内置函数

    len(dict)计算字典元素个数,即键的总数

    adict = {('a',):'sun','b':'cheng','c':'quan','age':27,'school':"lzu" ,'age':28}
    len(adict)
    
    5
    

    str(dict)输出字典,以可打印的字符串表示

    str(adict)
    
    "{('a',): 'sun', 'b': 'cheng', 'c': 'quan', 'age': 28, 'school': 'lzu'}"
    

    type(variable)返回输入的变量类型,如果变量是字典就返回字典类型

    type(adict)
    
    dict
    

    字典内置方法

    序号函数描述
    1 dict.clear() 删除字典内所有元素
    2 dict.copy() 返回一个字典的浅复制
    3 dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
    4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
    5 key in dict 如果键在字典dict里返回true,否则返回false
    6 dict.items() 以列表返回可遍历的(键, 值) 元组数组
    7 dict.keys() 返回一个迭代器,可以使用 list() 来转换为列表
    8 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    9 dict.update(dict2) 把字典dict2的键/值对更新到dict里
    10 dict.values() 返回一个迭代器,可以使用 list() 来转换为列表
    11 pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
    12 popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)

    dict.clear()

    adict = {'a':'sun','b':'cheng','c':'quan','age':27,'school':"lzu" }
    print ("字典长度 : %d" %  len(adict))
    adict.clear()
    print ("字典删除后长度 : %d" %  len(adict))
    
    字典长度 : 5
    字典删除后长度 : 0
    

    dict.copy()

    dict1 = {'Name': 'Sun', 'Age': 7, 'Class': 'First'}
     
    dict2 = dict1.copy()
    print ("新复制的字典为 : ",dict2)
    
    新复制的字典为 :  {'Name': 'Sun', 'Age': 7, 'Class': 'First'}
    

    直接赋值、浅拷贝和深度拷贝解析

    import copy
    dict1 =  {'user':'runoob','num':[1,2,3]}
     
    dict2 = dict1          # 浅拷贝: 引用对象
    dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
    dict4 = copy.deepcopy(dict1) #深拷贝
    
    
    # 修改 data 数据
    dict1['user']='root'
    dict1['num'].remove(1)
     
    # 输出结果
    print(dict1)
    print(dict2)
    print(dict3)
    print(dict4)
    
    
    
    {'user': 'root', 'num': [2, 3]}
    {'user': 'root', 'num': [2, 3]}
    {'user': 'runoob', 'num': [2, 3]}
    {'user': 'runoob', 'num': [1, 2, 3]}
    

    dict.fromkeys()

    seq = ('name', 'age', 'sex')
    
    dict = dict.fromkeys(seq)
    print ("新的字典为 : %s" %  str(dict))
    
    dict = dict.fromkeys(seq, 10)
    print ("新的字典为 : %s" %  str(dict))
    
    新的字典为 : {'name': None, 'age': None, 'sex': None}
    新的字典为 : {'name': 10, 'age': 10, 'sex': 10}
    

    dict.get(key, default=None)

    adict = {'a':'sun','b':'cheng','c':'quan'} 
    print(adict.get('a'))                            #获取键‘a’对应的值
    print(adict.get('d')) 
    print(adict.get('d',0)) 
    
    sun
    None
    0
    
    adict['d']                   #直接获取值,不存在而发生错误 
    
    ---------------------------------------------------------------------------
    
    KeyError                                  Traceback (most recent call last)
    
    <ipython-input-82-9fd784d666f4> in <module>
    ----> 1 adict['d']                   #直接获取值,不存在而发生错误
    
    
    KeyError: 'd'
    

    key in dict

    dict = {'Name': 'Sun', 'Age': 7}
     
    # 检测键 Age 是否存在
    if  'Age' in dict:
        print("键 Age 存在")
    else :
        print("键 Age 不存在")
    
    # 检测键 Sex 是否存在
    if  'Sex' in dict:
        print("键 Sex 存在")
    else :
        print("键 Sex 不存在")
     
     
    # not in
     
    # 检测键 Age 是否存在
    if  'Age' not in dict:
        print("键 Age 不存在")
    else :
        print("键 Age 存在")
    
    键 Age 存在
    键 Sex 不存在
    键 Age 存在
    

    dict.items()

    adict = {'a':'sun','b':'cheng','c':'quan'} 
    print ("Value : %s" %  dict.items())
    
    Value : dict_items([('Name', 'Sun'), ('Age', 7)])
    

    dict.keys()

    print(adict.keys())
    print(list(adict.keys() ))
    
    dict_keys(['a', 'b', 'c'])
    ['a', 'b', 'c']
    

    dict.setdefault(key, default=None)

    adict.setdefault('a')       #若字典存在键‘a’,则返回其对应的值
    
    'sun'
    
    adict.setdefault('d','sunchengquan')#不存在,则在字典中建立一个键值对
    
    'sunchengquan'
    
    adict
    
    {'a': 'sun', 'b': 'cheng', 'c': 'quan', 'd': 'sunchengquan'}
    

    dict.update(dict)

    adict.update({"c":"QUAN"})
    print(adict)
    adict.update({"e":"wow!!!"})
    print(adict)
    
    {'a': 'sun', 'b': 'cheng', 'c': 'QUAN', 'd': 'sunchengquan'}
    {'a': 'sun', 'b': 'cheng', 'c': 'QUAN', 'd': 'sunchengquan', 'e': 'wow!!!'}
    

    dict.values()

    print ("字典所有值为 : ",  list(adict.values()))
    
    字典所有值为 :  ['sun', 'cheng', 'QUAN', 'sunchengquan', 'wow!!!']
    

    pop(key[,default])

    print(adict.pop('d') )              #删除d键值对并返回值
    print(adict)
    
    sunchengquan
    {'a': 'sun', 'b': 'cheng', 'c': 'QUAN', 'e': 'wow!!!'}
    
    adict.pop('d')               #删除不存在的键值对,发生错误
    
    ---------------------------------------------------------------------------
    
    KeyError                                  Traceback (most recent call last)
    
    <ipython-input-97-96ffccefb11b> in <module>
    ----> 1 adict.pop('d')               #删除不存在的键值对,发生错误
    
    
    KeyError: 'd'
    
    print(adict.pop("d","nokey"),adict); # 设置默认值,必须添加,否则报错
    
    nokey {'a': 'sun', 'b': 'cheng', 'c': 'QUAN', 'e': 'wow!!!'}
    

    popitem()

    popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。

    如果字典已经为空,却调用了此方法,就报出KeyError异常。

    print(adict.popitem())              #删除任一项键值对并返回
    
    ('e', 'wow!!!')
    
    adict
    
    {'a': 'sun', 'b': 'cheng', 'c': 'QUAN'}
    

    字典推导式

    mcase = {'a': 10, 'b': 34}
    mcase_frequency = {v: k for k, v in mcase.items()}
    print (mcase_frequency)
    
    {10: 'a', 34: 'b'}
    

    集合set

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

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

    basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    print(basket)                      # 这里演示的是去重功能
    
    print('orange' in basket)                 # 快速判断元素是否在集合内
    
    print('crabgrass' in basket)
    
     
    # 下面展示两个集合间的运算.
    
    a = set('abracadabra')
    b = set('alacazam')
    print(a )                                 
    
    print(a - b )                             
    
    print(a | b )                             # 集合a或b中包含的所有元素
    
    print(a & b )                             # 集合a和b中都包含了的元素
    
    print(a ^ b )                             # 不同时包含于a和b的元素
    
    
    {'apple', 'banana', 'pear', 'orange'}
    True
    False
    {'a', 'b', 'r', 'c', 'd'}
    {'d', 'b', 'r'}
    {'a', 'b', 'r', 'l', 'c', 'd', 'm', 'z'}
    {'c', 'a'}
    {'z', 'd', 'r', 'm', 'b', 'l'}
    

    集合推导式

    类似列表推导式,同样集合支持集合推导式(Set comprehension):

    a = {x for x in 'abracadabra' if x not in 'abc'}
    a
    
    {'d', 'r'}
    

    添加元素

    • add()
    • update()
    thisset = set(("Google", "Runoob", "Taobao"))
    thisset.add("Facebook")
    print(thisset)
    
    
    {'Taobao', 'Runoob', 'Google', 'Facebook'}
    
    thisset = set(("Google", "Runoob", "Taobao"))
    thisset.update({1,3})
    print(thisset)
    thisset.update([1,4],[5,6])  
    print(thisset)
    
    {1, 'Runoob', 3, 'Taobao', 'Google'}
    {1, 'Runoob', 3, 4, 5, 6, 'Taobao', 'Google'}
    

    移除元素

    • remove()
    • discard()
    • pop()
    thisset = set(("Google", "Runoob", "Taobao"))
    thisset.remove("Taobao")
    print(thisset)
    thisset.remove("Facebook")   # 不存在会发生错误
    
    {'Runoob', 'Google'}
    
    
    
    ---------------------------------------------------------------------------
    
    KeyError                                  Traceback (most recent call last)
    
    <ipython-input-108-bece1975c10b> in <module>
          2 thisset.remove("Taobao")
          3 print(thisset)
    ----> 4 thisset.remove("Facebook")   # 不存在会发生错误
    
    
    KeyError: 'Facebook'
    
    thisset = set(("Google", "Runoob", "Taobao"))
    thisset.discard("Facebook")  # 不存在不会发生错误
    print(thisset)
    
    {'Taobao', 'Runoob', 'Google'}
    

    我们也可以设置随机删除集合中的一个元素

    thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
    x = thisset.pop()
     
    print(x)
    print(thisset)
    
    Taobao
    {'Runoob', 'Google', 'Facebook'}
    

    计算集合元素个数

    thisset = set(("Google", "Runoob", "Taobao"))
    len(thisset)
    
    3
    

    清空集合

    thisset = set(("Google", "Runoob", "Taobao"))
    thisset.clear()
    print(thisset)
    
    set()
    

    判断元素是否在集合中存在

    thisset = set(("Google", "Runoob", "Taobao"))
    print("Runoob" in thisset)
    
    print("Facebook" in thisset)
    
    
    True
    False
    

    集合内置方法完整列表

    方法描述
    add() 为集合添加元素
    clear() 移除集合中的所有元素
    copy() 拷贝一个集合
    difference() 返回多个集合的差集
    difference_update() 移除集合中的元素,该元素在指定的集合也存在
    discard() 删除集合中指定的元素
    intersection() 返回集合的交集
    intersection_update() 删除集合中的元素,该元素在指定的集合中不存在
    isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
    issubset() 判断指定集合是否为该方法参数集合的子集
    issuperset() 判断该方法的参数集合是否为指定集合的子集
    pop() 随机移除元素
    remove() 移除指定元素
    symmetric_difference() 返回两个集合中不重复的元素集合
    symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中
    union() 返回两个集合的并集
    update() 给集合添加元素

    difference()

    
    x = {"apple", "banana", "cherry"}
    y = {"google", "microsoft", "apple"}
     
    z = x.difference(y) 
     
    print(z)
    
    
    {'banana', 'cherry'}
    

    intersection()

    
    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "apple"}
     
    z = x.intersection(y) 
     
    print(z)
    
    
    {'apple'}
    

    intersection_update()

    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "apple"}
     
    x.intersection_update(y) 
     
    print(x)
    
    {'apple'}
    
    x = {"a", "b", "c"}
    y = {"c", "d", "e"}
    z = {"f", "g", "c"}
     
    x.intersection_update(y, z)
     
    print(x)
    
    {'c'}
    

    isdisjoint()

    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "facebook"}
     
    z = x.isdisjoint(y) 
     
    print(z)
    
    
    True
    

    issubset()

    判断集合 x 的所有元素是否都包含在集合 y 中

    x = {"a", "b", "c"}
    y = {"f", "e", "d", "c", "b", "a"}
     
    z = x.issubset(y) 
     
    print(z)
    
    
    True
    

    如果没有全部包含返回 False

    x = {"a", "b", "c"}
    y = {"f", "e", "d", "c", "b"}
     
    z = x.issubset(y) 
     
    print(z)
    
    
    False
    

    issuperset()

    判断集合 y 的所有元素是否都包含在集合 x 中

    x = {"f", "e", "d", "c", "b", "a"}
    y = {"a", "b", "c"}
     
    z = x.issuperset(y) 
     
    print(z)
    
    
    True
    

    如果没有全部包含返回 False

    x = {"f", "e", "d", "c", "b"}
    y = {"a", "b", "c"}
     
    z = x.issuperset(y) 
     
    print(z)
    
    
    False
    

    symmetric_difference()

    返回两个集合组成的新集合,但会移除两个集合的重复元素

    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "apple"}
     
    z = x.symmetric_difference(y) 
     
    print(z)
    
    
    {'banana', 'runoob', 'cherry', 'google'}
    

    symmetric_difference_update()

    移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中

    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "apple"}
     
    x.symmetric_difference_update(y) 
     
    print(x)
    
    
    {'banana', 'runoob', 'cherry', 'google'}
    

    union()

    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "apple"}
     
    z = x.union(y) 
     
    print(z)
    
    
    {'apple', 'banana', 'runoob', 'cherry', 'google'}
    

    合并多个集合

    x = {"a", "b", "c"}
    y = {"f", "d", "a"}
    z = {"c", "d", "e"}
     
    result = x.union(y, z) 
     
    print(result)
    
    
    {'c', 'a', 'f', 'e', 'd', 'b'}
    

    函数frozenset()

    set1 = {'c', 'a', 'f', 'e', 'd', 'b'}
    set2 = frozenset(set1)
    print(set2)
    set2.remove(2)
    
    frozenset({'c', 'a', 'f', 'e', 'd', 'b'})
    
    
    
    ---------------------------------------------------------------------------
    
    AttributeError                            Traceback (most recent call last)
    
    <ipython-input-130-1f096bd4e2ca> in <module>
          2 set2 = frozenset(set1)
          3 print(set2)
    ----> 4 set2.remove(2)
    
    
    AttributeError: 'frozenset' object has no attribute 'remove'
    
  • 相关阅读:
    (转)要在自己感兴趣的领域成为专家,要经过一万小时训练
    (学习日记)数据结构第一章中life游戏开发的学习记录
    (转)响应式Web设计是大势所趋还是时代的产物
    (学习日记)裘宗燕:C/C++ 语言中的表达式求值
    (转)如果你喜欢编程 给想做程序员的人的7个建议
    NHibernate 中删除数据的几种方法
    如何避免在安装SQL SERVER 2008时,出现Rule “Previous releases of Microsoft Visual Studio 2008″ failed.
    【转】A brief overview of Ncqrs
    爱博图微博图片批量下载小工具
    解释用Q号算出你的年龄的“奥妙”。。。
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/13689770.html
Copyright © 2020-2023  润新知