第八章、列表与字典

列表

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容