文科生 python 简书_文科生学Python系列5: 元组/字典

第三课 的主要内容是:

(今天的截图中运行工具不是用Python IDLE了,而是jupyter.)数据结构:元组/字典

循坏:while循环/循环控制/嵌套循环

函数:如何自定义函数

案例讲解:工资计算器函数

元组:元组()和列表[ ] 非常相似,都是由若干值组成的一个序列;

元组中存储的值可以是任何数据类型;

元组(主席台)中的任何元素都是不可变的,列表(观众席)可变;

元组的数据结构不需要改变,因而在内存使用和表现上,元组比列表更有效率;

可以把列表转换成元组;

元组类型

索引和切片等列表操作也可以使用到元组上

查找元素

元组中的元素是不可修改的,而列表是可以修改的。

看出来了吗?前面出错的6和7,其实是不熟悉语句操作造成的。

红色警报在6中出现,是因为没有引号表示元素,加上索引列表的时候,用的是中括号而不是小括号。

红色警报在7中出现,是因为括号用错了。

8是正确修改列表中的元素的示范。

9表示的是元组中的元素不可修改。错误提示是“类型错误”,告诉你在元组中的元素是不能被赋值的。

字典(dictionary)

可以看作是键(key)和值(value)之间的一系列一一对应关系

中间用:冒号来区分键和值

字典VS列表列表由整数作为索引,字典由key作为索引

列表中的元素有顺序,按索引0,1,2。。。这么排列

字典中的元素没有固定顺序,常用字符串类型做key

列表和字典都是可变类型,可进行增删改操作

都可以通过 [ ] 获取元素

列表有序,字典中的元素是无序

在一对一的查找方面,字典比列表更方便

这是列表查找,略显冗长

下图是用字典来索引上图内容的过程,只需要一步:

字典看起来使用是更方便的

如何获取字典的 keys 和 values.下图演示过程。

那个是单个序列列出来的,要是想要同时获得键值对的话,用items 语句, 得到的每一个元素都是一个元组(因为都是用圆括号括起来的)

获取keys和values,还有键值对(16)

我想不明白的是,为什么这里16输出分键值对之间,不是用冒号连接而是用逗号呢?

通过key键来获取value值

上图中,想要输出France对应的值,除了直接检索之外,还可以用到get语句,在这个语句中得出的结果是一样的,但是注意到,用get和不用get还有有一点区别的,用get的时候,索引的那个元素是用圆括号包裹起来的,而不用get的时候,是用方括号包裹起来的。所以,我肯定会手贱一下,看看要是没有遵循这个括号的区别,结果会是什么:

括号不对的运行结果

搜索字典中没有没有的Britain这个元素,结果是什么呢?

想要在这对数据里面问:“喂,Britain在不在里面啊?” 可以用in语句来查找

答案是False,也就是里面并没有Britain兄弟啊!

或者用另外一种方式来查找,直接用20那条语句的结果是出错,所以可以用回get语句,要是没有的话,直接是没有输出。

但是有人觉得这程序太没礼貌了吧!问你一句你一点反应都没有?!所以就有了22语句,意思就是,要是里面有Britain兄弟的话,你就跟我说一声Unknown吧,至少有回应啊!

请注意,这里包裹起来的语句之间,用的是逗号。

字典的增删改:

增加元素

增加字典内容

我在这对数据里面找不到Britain兄弟怎么办?那我把它加进去呗!用索引形式的方括号包裹Britain兄弟,后面赋值 London,然后我们重新输出Europe,里面就有刚加进去的Britain了!

而在这个过程之中,可以看到输出的结果并没有按照之前的顺序来排列,所以也可以看出:字典中的元素是没有顺序的。

修改元素

修改字典元素

需要修改元素,把小写变成大写,重新赋值,就可以了。

删除元素

删除字典元素

还是一样的套路,用del 语句。

拿回我们上节课的案例,还记得我们上节课还不会字典这个东西,只会序列的时候,是用了多少步才走到最后吗?今天学了一样新技能,简化了多少!

案例

过程中把获取单词列表的split语句打错了,结果有是红色警报,就是说找不到那个错误的命令是什么,所以我开始理解“脚本”的意思其实是在基础链上定义很多个含义,然后后面运行时直接打那个码,就能在当初设定的范围里面运行出那个值。

这个案例挺多新的知识点要学的:

split语句来获取单词列表,也就是可以把重复的单词重新列出来,每个数量只有1;

用dict语句来初始化一个空的字典;

用word来赋值一个初始为0的字典,在words中查找,得出一个新的字典;

用循环for。。。in。。。来遍历序列里面的元素,“遍历”这个词真的是莫名高大上!

还有这篇前文提到的怎么找Britain兄弟,要是不在的话程序也得喊一声这个功能,这里是用 counts[word] = counts.get (word,0) +1 来实现的。也就是要是在遍历words这个字典中的元素中找到一个相同的值,那就在这个值上面+1,要是找不到这个值,那就输出为0.

所以最后的结果就是这样啦!和上节课的结果是一毛一样的!

然而,我很好奇,为什么Python里面的词一定就是要那个词呢?其他词不行吗?就像上面,为什么一定要用 counts,我用 datas 取代 counts 试了试

用 datas 取代 counts

“不能赋值”,所以词还是要老实跟着打?

可是我怎么知道每个词在程序里面的含义呢????

这个案例是为了找出这句话中出现最高词频的词以及它的次数,前面是把这两个要统计的词和数梳理出来了,下面就是要在梳理的结果之后得出最高值

找出最高词频的单词

这种 a.b 的语句好像 a 都是赋值过的序列或者字典,而 b 是已经定义好的脚本。在上图是把 bigcount 和 bigword 初始化,然后用循环语句和 or 语句运行,最后找到最大值和最大值的数量。

在 “ for word,count in counts. items(): ” 中,word和 count 是一组键值对,这个键值对在counts这个键值对中找东西,就像前文在Europe中找Britain一样。

items搭配在这里,为了显示counts这个键值对更加明显?

下面的语句是逐一筛选,如果这个值C大于刚刚那个值D,那这个值C就是新的输出,取代了D。

最后得出了结果最高词频是the ,出现次数为7

最后是作业的检验:

作业3-1

然而,前面用了两千多个字和那么多图的讲解,把自己看作是一个白痴讲了一天,我理解的做法是这样的:

第一下,直接是Europe['France' :capital ],  此时想浮起微笑面对这个白痴。这个时候还是学不会字符上加引号!都第三节课了!!!

然而加了引号的33号运行,还是错误的,那我加一个方括号啊!还是错误。。。

然后我去作业区,偷看同学们的作业是怎么做的,自己运行一遍:

加入一个键值对,好像比找巴黎要容易一点,毕竟也是对着打了4遍了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值