美文网首页
第八章、列表与字典

第八章、列表与字典

作者: 聽風踏雪 | 来源:发表于2017-05-16 18:17 被阅读0次

    列表

    列表是Python中最具灵活性的有序集合对象类型。

    Python列表是:

    任意对象的有序集合

    通过偏移读取

    可变长度、异构以及任意嵌套

    属于可变序列的分类

    对象引用数组

    实际应用中的列表

    1、基本列表操作:

    由于列表是序列,它支持很多与字符串相同的操作。

    2、列表迭代和解析:

    3、索引、分片和矩阵:

    由于列表都是序列,对于列表而言,索引和分片操作与字符串中的操作基本相同。

    4、原处修改列表:

    由于列表是可变的,他们支持原处改变列表对象的操作。

    ①、索引与分片的赋值:

    当时用列表的时候,可以将它赋值给一个特定项(偏移)或整个片段(分片)来改变它的内容。

    索引和分片的赋值都是原地修改,它们对列表进行直接修改,而不是生成一个新的列表作为结果。

    ②、列表方法调用:

    列表方法append:简单地将一个单项(对象引用)加至列表末端。

    列表方法sort:原地对列表进行排序。

    列表方法reverse:可原地反转列表。

    列表方法extend:能够在末端插入多个元素。

    列表方法pop:能够在末端删除一个元素。

    列表方法remove:通过值删除某元素。

    列表方法insert:在偏移处插入某元素。

    列表方法index:查找某元素的偏移。

    内置函数sorted和reversed作用同上。

    ③、其他常见列表操作:

    1、由于列表是可变的,你可以用del语句在原处删除某项或某片段。

    2、因为分片赋值是删除外加插入操作,也可以通过将空列表赋值给分片来删除列表片段(L[i:j]=[])。

    字典

    除了列表以外,字典(dictionary)也许是Python之中最灵活的内置数据结构类型。如果把列表看做是有序的对象集合,那么就可以把字典当成是无序的集合。

    python字典的主要属性如下:

    ①、通过键而不是偏移量来读取:

    ②、任意对象的无序集合:

    ③、可变长、异构、任意嵌套:

    ④、属于可变映射类型:

    ⑤、对象引用表(散列表):

    实际应用中的字典

    字典通过键进行索引,被嵌套的字典项是由一系列索引(方括号中的键)表示的。

    1、字典的基本操作:

    内置len函数也可用于字典,它能够返回存储在字典里的元素的数目,或者说是其keys列表的长度,这二者是等价的。

    字典的has_key方法以及in成员关系操作符提供了键存在与否的测试方法,keys方法则能够返回字典中所有的键,将它们收集在一个列表中。

    2、原处修改字典:

    与列表相同,字典也是可变的,因此可以在原处对它们进行修改、扩展以及缩短而不需要生成新字典。

    del语句在这里也适用。它删除作为索引的键相关联的元素。

    3、其他字典方法:

    字典方法提供了多种工具。例如,字典values和items方法分别返回字典的值列表和(key,value)对元组。

    读取不存在的键往往都会出错,然而键不存在时通过get方法能够返回默认值(None或者用户定义的默认值)。

    字典的update帆帆有点类似于合并,但是,它和从左到右的顺序无关。它把2一个字典的键和值合并到另一个字典中,盲目地覆盖相同的键值。

    字典的pop方法能够从字典中删除一个键并返回它的值。

    4、语言表:

    就任何字典D而言,写成for key in D:和写成完整的key in D.keys():效果是一样的。

    5、字典用法的注意事项:

    ·序列运算无效。

    ·对新索引赋值会添加项。

    ·键不一定总是字符串。

    ①、使用字典模拟灵活的列表:

    ②、字典用于稀疏数据结构:

    ③、避免missing-key错误:

    ④、使用字典作为记录:

    6、创建字典的其他方法:

    ①、{'name':'mel','age':45}

    ②、D={}  D['name']='mel  D['age']=45

    ③、dict(name='mel',age=45)

    ④、dict([('name','mel'),('age',45)])

    这四种形式都会建立相同的两键字典,但它们在不同的条件下有用:

    ①、如果你可以事先拼出整个字典,那么第一种是很方便的。

    ②、如果你需要一次动态地建立字典的一个字段,第二种比较合适。

    ③、第三种关键字形式所需的代码比常量少,但是键必须都是字符串才行。

    ④、如果你需要在程序运行时把键和值逐步建成序列,那么最后一种形式比较有用。

    如果所有键的值都相同,你也可以用这个特殊的形式对字典进行初始化——简单地传入一个键列表,以及所有键的初始值(默认值为空):

    >>>dict.fromkeys(['a','b'],0)

    7、Python3.0中字典的变化:

    ①、支持一种新的字典解析表达式,这是列表和集合解析的“近亲”。

    ②、对于D.key、D.values和D.items方法,返回可迭代的视图,而不是列表。

    ③、由于前一点,需要新的编码方式通过排序键来遍历。

    ④、不再直接支持相对大小比较——取而代之的是手动比较。

    ⑤、不再有D.has_key方法——相反,使用in成员关系测试。

    在Python3.0中的字典有什么新特性:

    ①、字典解析:

    Python3.0中的字典可以用字典解析来创建。如下代码使用对应结果中的每一个键/值对构建了一个新的字典:

    >>>D={k:v for (k,v) in zip(['a','b','c'],[1,2,3])}

    ②、字典视图:

    在Python3.0中,字典的keys、values和items都返回视图对象,而Python2.6中,它们返回实际的结果列表。

    Python3.0中的字典视图并非创建后不能改变——它们可以动态地反映在视图对象创建之后对字典做出的修改。

    ③、字典视图和集合:

    与Python2.X中的列表结果不同,keys方法所返回的Python3.0的视图对象类似于集合,并且支持交集和并集等常见的集合操作;values视图不是这样的,因为它们不是唯一的;但items结果是的,如果(key,value)对是唯一的并且可散列的话。

    ④、排序字典键:

    由于keys不会返回一个列表,必须要么手动地转换为一个列表,要么在一个键视图或字典自身上使用sorted调用。

    ⑤、字典大小比较不再有效:

    尽管在Python2.6中可以直接用<、>等比较字典的相对大小,但在Python3.0中这不再有效。然而,可以通过手动地比较排序后的键列表来模拟。

    Python3.0中字典相等性测试仍然有效。

    ⑥、has_key方法已死:in永生:

    广为使用的字典has_key键存在测试方法在Python3.0中取消了。相反,使用in成员关系表达式,或者带有默认测试的一个get(其中,in通常是首选的)。

    本章小结:

    本章我们探讨了列表和字典类型——这可能是在Python程序中所见到并使用的两种最常见、最具有灵活性而且功能最为强大的集合体类型。本章介绍了列表类型支持任意对象的以位置排序的集合体,而且可以任意嵌套,按需要增长和缩短。字典类型也是如此,不过它是以键来存储元素而不是位置,并且不会保持元素之间任何可靠的由左至右的顺序。列表和字典都是可变的,所以它们支持各种不适用于字符串的原处修改操作。例如,列表可以通过append调用来进行增长,而字典则是通过赋值给新键的方法来实现。

    相关文章

      网友评论

          本文标题:第八章、列表与字典

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