派森小镇 (四)冤家对头

派森小镇的故事

        雾霭沉沉,水波澄碧。在一处悠远僻静的地方上有一个神奇的小镇,小镇的名字叫派森镇。小镇的前面有一条河,碧蓝的水映出小镇周围水墨画般朦胧的世界。

        小镇上的人一出生就拥有特殊的技能,他们中的每一个人都是python的成员,他们用自己的特殊技能构成了千变万化的python世界,他们可以用自己的特殊身份设计与研发。

    “这个顾客是我的。”

    “这个顾客是我的,他先来我的商店的,啊啊啊……”

    无辜的小列表被字典和集合两个拽着。

    小列表作为变量先生商店的员工,本来是替变量先生去SET商店买些装备,但是一走到SET商店门口就被字典和集合拽住。

    小列表费力的说:“你们别拽了,我只是想买些东西,你们两个不用这样啊。”

    “谁来救救我啊!!!”

    其实,在派森小镇上,字典和集合是一对冤家对头。字典是一个无序、可变和有索引的集合。集合是无序和无索引的集合。他们两个有很多相似的地方,又同时在一条街上开设SET商店,所以经常抢生意,是一对十足的冤家对头。

    小列表就这样被字典和集合撕扯着,说:“你们别拽了,我感觉自己快要被撕扯散架了。”

这时,变量先生走在街上看到商铺门口为了很多人,问道:“怎么回事啊,这里怎么围了这么多的人啊。”

    路人回答道:“这不是吗,字典和集合又在抢生意了。”

    变量先生定睛一看:“天啊,这不是小列表吗!”

    变量先生随即就拉开了两人,救出了小列表。

    变量先生说:“二位不要着急,你们的商店里各自都有什么特色啊,我们都看一看。”

    字典率先说:“字典是一个无序、可变和有索引的集合。在Python中,字典用花括号编写,拥有键和值。主要的操作方法是增删改查等等。”

    集合也不服输,随即抢着说:“你不用听字典瞎说,我的集合可比他厉害多了。集合是无序和无索引的集合。在Python中,集合用花括号编写像这样s={"a","b","c"}print(type(s))#print(s)#{'b','c','a'}

    因为集合是无序的,所以你无法通过索引去找到集合的内容,那我怎么去确定里面是否有指定的内容可以通过for循环遍历字典,在用in关键字查询是否存在指定值就行了。”

变量先生听到两个人的陈述之后“都很不错,很难抉择。”

    “这样吧,小列表,咱们两家商铺都去逛逛,每一家都买点东西吧。”

    小列表激动的说:“好!”

随后,变量先生和小列表光顾了两家SIT商店。

相关知识----字典集合

三、元组

列表是可变序列,元组是不可变序列

(一)元组创建、迭代器等生成元组

1. 元组名=(,)或者元组名=,

2. 通过tuple()创建元组 元组名=tuple()

 Tuple可以接收列表、字符串、其他序列类型等元组

 List接收元组字、符串、其他序列、类型迭代器等列表

(二)元组元素访问和计数

1.元组元素不能修改

2.元组元素的访问、index()、count()、切片等操作和列表一样

3.元组修改原列表对象。对元组进行排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象。

4.zip(列表1,列表2)将多个列表对应位置的元素组合成元组,并返回zip对象

(三)生成器推导式创建元组

1.从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号

2.列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象

3.可以通过生成器对象,转换成列表或者元组。也可以使用生成器对象的_next_()方法进行遍历,或者直接作为迭代器对象使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象

(四)元组总结

1.元组核心特点是:不可变序列

2.元组访问和处理速度比列表快

3.与整数和字符串一样,元组可以作为字典的键,列表永远不能作为列表的键使用

四、字典

(一)基本概念

1.字典是“键值对”的无序可变序列,字典中的某一个元素都是一个“键值对”,包含:“键对象”和“值对象。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”

2.定义方式 名称{键对象:值对象,}

3.字典中的键对象找到对应的值

4

(1)键是任意不可变数据

(2)列表、字典、集合、不能作为“键”

(3)“键”不可重复,后面的键取代前面的重复“值”是可以任意的数据,并且可重复

(二)字典的创建

1. 通过{} 、dict()函数创建

2. 通过zip()创建

3. 通过fromkeys创建值为空的字典

(三)字典元素的访问

1. 通键获得值:键不存在,抛出异常

2. get方法;键不存在时返回none,也可以设置默认返回对象

3. 列出所有的键值对。.item

4. 列出所有的键列出所有的值 .key .value

5. len()键值对个数

6. 检测一个键是否在字典中 in

(四)字典元素添加、修改、删除

1. 给字典新增键值对:键存在,覆盖值;键不存在新增键值对。

2. 使用update()将新字典中所有键值对全部添加到就旧字典对象上,如果key存在则值覆盖

3. 字典元素删除 del(删除某一个键) clear(删除字典所有元素) pop删除某一个键值对返回值 popitem()随机删除字符对

(五)序列解包

1. 序列解包用于列表、元组、字典

2. 在对字典进行序列解包时,默认是对键进行操作;如果需要对键值对进行操作需要item;对值进行操作需要values()

(六)字典底层原理

1. 创建过程:字典对象核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两个部分:一个是键对象的引用,一个是值对象的引用。由于所有的bucket结构和大小一致,我们可以通过偏移量来读取指定bucket

(1)将一个键放入字典底层原理,假设创建字典a对象完成后,数组长度为8.要把“键值对”放入到字典中需要计算键的散列值。Pytohn可以通过hash函数计算。由于数组长度是8可以拿计算出的散列值最右边的3位数字(长度是16四位的找)作为偏移量,将最右边的三位数转成十进制数,查看偏移量对应的bucket是否为空,若为空则键值对放进去。如果不为空,一次右边3位作为偏移量,直到找到buckeet将键值对放进去

(2)Python会根据散列表的拥挤程度扩容,将原有内容复制过来。接近2/3之时扩容

2. 根据键查找键值对底层过程:依次取散列值不同位置的数字。计算方法同创建过程。判断对应的bucket是否是为空。为空返回none。不为空则将bucket的键对象计算对应散列值,和原散列值进行比较,如果相等,对应的值对象返回,不相等依次取其他数字重新计算。取完后,仍然没有没有找到。则返回none

五、集合

集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合所有的元素都是字典中的“键对象”,因此不能重复的且唯一的。

(一)集合的创建和删除

1使用{}创建集合,使用add方法添加到元素

2.使用set(),可将列表元组等可迭代对象转成集合。如果原来的数据重复,则保留一个

3. remove()删除指定元素,clear()清空集合

(二)相关操作

1. 并集    |   union

2. 交集    &   intersection

3. 差集    -   difference

派森

先生

大鹏diary

​​​​​​​

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据小金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值