美文网首页
Python趣味入门8:集合-独乐乐不如众乐乐

Python趣味入门8:集合-独乐乐不如众乐乐

作者: 小牛叔 | 来源:发表于2020-04-12 19:43 被阅读0次

    1、前言

    凛东将至,琼恩·雪诺当上司令官命令山姆威尔去南方,到旧镇学习成为一个学士再回黑城堡。山姆发现在Python语言的图书馆中的藏书有“列表”、“集合”、“元组”和“字典”4种组织形式。

    2、列表list

    旧镇图书馆书架上的藏书是“列表”形式的,为了帮助理解列表山姆记得小时候最开心的事情就是逛街。因为老妈会给买最喜欢吃的糖葫芦。竹签就把许多山楂串成一串。列表处理数据与吃糖葫芦其实很相似,:

    列表的顺序
    • 元素有序。列表中的元素都是有顺序的,可以通过下标来定位。
    • 可以编辑。列表变量中的元素可以被删除、添加。

    2.1 列表的定义

    |元素0|元素1|...

    如上所示,列表中的元素是从0开始的。

    如下代码使用中括号和逗号分隔来定义列表中的内容,如下定义了各种列表形式,比如:包括1,2,3,4,5五个整数的列表....

    a=[1,2,3,4,5]   #定义5个元素的列表
    b=[] #定义了空的列表
    c=['夜王前传',1045,'龙晶使用方法',1056] #定义了书名页数
    d=[['夜王前传','龙晶使用方法'],[1045,1056]]   #定了2个列表元素(书名列表、页数列表)的列表
    

    定义完成可以通过如下的方式“取出数据”:

    a[0] #表示第0个元素1
    a[1] #表示第1个元素2
    c[1] #表第第1个元素1045
    

    此外,还可以使用负数来倒着取元素,今天山姆的女友吉莉来看他了,提义两个人玩扑克牌,我们定义一幅扑克可以这样定义:

    扑克的列表

    2.2 切片操作

    列表在计算机中有如下的主流操作: 切片、删除、弹出、添加。

    切片就像在书柜(列表)中抽出中间一部分书本(元素),切片操作是这样的,使用冒号分隔前后位置(重要:后面的位置是不被包括的),继续之前定义我们看示例:

    a=[1,2,3,4,5]   #定义5个元素的列表
    #形成新的列表[2,3]
    a[-4:-2]
    #形成新的列表[2,3]
    a[1:3]
    

    切片可以省略前后的数字,表示开始和结束,切片有好处就是不会产生“溢出错误”,如下的代码在计算时只返回空列表,而不会出错:

    #表示从第100位置开始到结束的切片,返回空
    a[100:]
    #下面语句会产生溢出错误
    a[100]
    

    2.3 添加删除操作

    使用append动作来添加元素至队尾、使用del语句删除元素、remove动作删除列表中某一个值(只能一个),如下所示:

    列表.append(元素) #添加元素进列表尾
    列表.remove(值) #删除列表中的值一次
    del 元素 #在内存中删除元素

    a=[1,2,3,4,5]   #定义5个元素的列表
    del a[0]
    print('删除a第0个:',a)
    a.append(5)
    print('添加5,a:',a)
    a.remove(5)  #只能删除一次5
    print('删除数值5,a:',a)
    

    运行的结果如下:

    删除a第0个: [2, 3, 4, 5]
    添加5,a: [2, 3, 4, 5, 5]
    删除数值5,a: [2, 3, 4, 5]
    

    大家可能发现,除了del语句比较特殊,其它append和remove动作在运行时都需要把列表变量放在小数点前,现在大家可以理解为这是列表的专门的动作,其实这种写法表示的是:调用列表class类的方法函数,大家要记往。

    del 语句不光应用于列表,它表示在内存中删除销毁对象,任何变量都可以被“销毁”

    2.4 插入弹出操作

    弹出pop操作也列表的专门方法,表示从列表中的某个位置删除对象,但是会同时返回这个对象,就好像子弹从弹匣中弹出来一样。同样插入insert操作也可以基于位置把新元素插入列表。

    列表.pop(位置)#不写就默认最后一个
    列表.insert(位置,元素) #把元素插入位置当中

    a=[2,3,4,5,5]
    b = a.pop(3)
    print('弹出第3个元素,a:',a,',弹出了:',b)
    #第0个位置前插入字符“首”
    a.insert(0,'首')
    print('插入a:',a)
    

    上面的代码运行结果如下图:

    弹出第3个元素,a: [2, 3, 4] ,弹出了: 5
    插入a: ['首', 2, 3, 4]
    

    3、元组tuple

    元组可看成是“只读”的列表,它使用成对的圆括号()来定义,其中的元素都有0开始的位置,但只能读取而不能添加和删除其中的元素。这就类似于Sam在学院中看到的珍贵特定古籍书柜,柜中的书籍都是固定位置的,只能取阅而不能更新新的书籍进来,也不允许把书籍抽走放在别处或是销毁。

    在Sam学院中把书籍位置使用(柜号,行号,列号)的元组来表示,我们看示例:

    #Sam学院中把书籍位置使用(柜号,行号,列号)来表示
    book_a_loc = (1,23,34)
    book_b_loc = (5,10,90)
    print('a书位置:',book_a_loc)
    print('a书行列:',book_a_loc[1:])
    print('b书行号:',book_b_loc[1])
    
    #试删除第1个元素会出错
    del book_a_loc[0]
    

    运行后的结果如下:

    a书位置: (1, 23, 34)
    a书行列: (23, 34)
    b书行号: 10
    Traceback (most recent call last):
      File "/....../demo2.py", line 7, in <module>
        del book_a_loc[0]
    TypeError: 'tuple' object doesn't support item deletion
    

    错误信息提示我们,tuple元组类型不支持元素删除。

    嘿嘿:Sam问道如果把列表加入元组呢,到底可编辑还是不可编辑?
    结论是这样的,元组虽然不能编辑,但是其中作为元素的列表却是可以编辑的。

    具体交给读者去试试吧!

    4、集合set

    在学院中有一些正在借阅当中的书籍,通常被学士位乱堆在桌子上,也没有顺序,这种在python中没有顺序的元素集叫“集合”,我们定义空集合时使用set(),我们定义集合时使用{元素1,....,}来表示。它有如下的特点:

    • 无序
    • 不重复
    s = {'男','男','女'}
    print(s)
    

    在上面的定义当中,我们有重复的男,但是打印出来只有2个值:

    {'女', '男'}
    

    集合类型在数学上有交并差补运算,同样在python当中也有运算符分别是&|-^,具体示例如下图:

    n1 = {'张','王'}
    n2 = {'何','王'}
    print('合',n1&n2,'并',n1|n2,'差',n1-n2,'补',n1^n2)
    

    运行结果如下:

    合 {'王'} 并 {'何', '张', '王'} 差 {'张'} 补 {'何', '张'}
    

    5、字典dict

    就像Sam经常使用的字典类的书籍中,有一种数据结构dict,Sam想查词dragonglass(龙晶石)就从dragonglass索引去找内容。dict当中每一个元素由冒号分隔的两部分组成,前部分当索引的叫关键字key(个人觉得叫钥匙更形象),当内容的叫value(值)。

    字典内的元素是没有位置的,只能通过关键字来获得内容。

    #字典定义分隔符{},后可用回车
    d = {
        'dragon':'一种古老的动物',
        '龙晶':'使用龙的骨骼形成化石晶体',
        }
    #查询 龙晶    
    print('龙晶',d['龙晶'])
    #插入元素
    d['丹尼莉丝'] = '坦格利安家族的风暴降生丹尼莉丝坦格利安一世、不焚者、弥林女王、安达尔人和先民的女王、七国统治者暨全境守护者、草原上的卡丽熙、打碎镣铐者以及龙之母!'
    #删除dragon
    d.pop('dragon')
    #打印整个字典
    print('d的内容',d)
    
    

    运行后,结果如下:

    龙晶 使用龙的骨骼形成化石晶体
    d的内容 {'龙晶': '使用龙的骨骼形成化石晶体', '丹尼莉丝': '坦格利安家族的风暴降生丹尼莉丝坦格利安一世、不焚者、弥林女王、安达尔人和先民的女王、七国统治者暨全境守护者、草原上的卡丽熙、打碎镣铐者以及龙之母!'}
    

    通过对字典的熟练运用,SAM找到了龙晶矿的所在地,他决定把这个消息告诉SNOW,帮助七国打赢夜王之战。

    恭喜你又进步了一点,跟随小牛叔,摆正编程入门姿式!

    相关文章

      网友评论

          本文标题:Python趣味入门8:集合-独乐乐不如众乐乐

          本文链接:https://www.haomeiwen.com/subject/znxbmhtx.html