python字典和集合对象可以进行索引操作_第八章、列表与字典

列表

列表是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调用来进行增长,而字典则是通过赋值给新键的方法来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值