python经典编程题中的字典河流题?

迄今为止,我们已经为大家介绍了Python中的三种容器型数据类型,但是这些数据类型还不足以帮助我们解决所有的问题。例如,我们要保存一个人的信息,包括姓名、年龄、体重、单位地址、家庭住址、本人手机号、紧急联系人手机号等信息,你会发现我们之前学过的列表、元组和集合都不是最理想的选择。
集合肯定是最不合适的,因为集合有去重特性,如果一个人的年龄和体重相同,那么集合中就会少一项信息;同理,如果这个人的家庭住址和单位地址是相同的,那么集合中又会少一项信息。另一方面,虽然列表和元组可以把一个人的所有信息都保存下来,但是当你想要获取这个人的手机号时,你得先知道他的手机号是列表或元组中的第6个还是第7个元素;当你想获取一个人的家庭住址时,你还得知道家庭住址是列表或元组中的第几项。总之,在遇到上述的场景时,列表、元组、字典都不是最合适的选择,我们还需字典(dictionary)类型,这种数据类型最适合把相关联的信息组装到一起,并且可以帮助我们解决程序中为真实事物建模的问题。

Python程序中的字典跟现实生活中的字典很像,它以键值对(键和值的组合)的方式把数据组织到一起,我们可以通过键找到与之对应的值并进行操作。就像《新华字典》中,每个字(键)都有与它对应的解释(值)一样,每个字和它的解释合在一起就是字典中的一个条目,而字典中通常包含了很多个这样的条目。
在Python中创建字典可以使用{}字面量语法,这一点跟上一节课讲的集合是一样的。但是字典的{}中的元素是以键值对的形式存在的,每个元素由:分隔的两个值构成,:前面是键,:后面是值,代码如下所示。
‘麓’: ‘山脚下’, ‘路’: ‘道,往来通行的地方;方面,地区:南~货,外~货;种类:他俩是一~人’,
‘蕗’: ‘甘草的别名’, ‘潞’: ‘潞水,水名,即今山西省的浊漳河;潞江,水名,即云南省的怒江’
通过上面的代码,相信大家已经看出来了,用字典来保存一个人的信息远远优于使用列表或元组,因为我们可以用:前面的键来表示条目的含义,而:后面就是这个条目所对应的值。
当然,如果愿意,我们也可以使用内置函数dict或者是字典的生成式语法来创建字典,代码如下所示。

dict函数(构造器)中的每一组参数就是字典中的一组键值对

可以通过Python内置函数zip压缩两个序列并创建字典

用字典生成式语法创建字典

想知道字典中一共有多少组键值对,仍然是使用len函数;如果想对字典进行遍历,可以用for循环,但是需要注意,for循环只是对字典的键进行了遍历,不过没关系,在讲完字典的运算后,我们可以通过字典的键获取到和这个键对应的值。
对于字典类型来说,成员运算和索引运算肯定是最为重要的,前者可以判定指定的键在不在字典中,后者可以通过键获取对应的值或者向字典中加入新的键值对。值得注意的是,字典的索引不同于列表的索引,列表中的元素因为有属于自己有序号,所以列表的索引是一个整数;字典中因为保存的是键值对,所以字典的索引是键值对中的键,通过索引操作可以修改原来的值或者向字典中存入新的键值对。需要特别提醒大家注意的是,字典中的键必须是不可变类型,例如整数(int)、浮点数(float)、字符串(str)、元组(tuple)等类型的值;显然,列表(list)和集合(set)是不能作为字典中的键的,当然字典类型本身也不能再作为字典中的键,因为字典也是可变类型,但是字典可以作为字典中的值。关于可变类型不能作为字典中的键的原因,我们在后面的课程中再为大家详细说明。这里,我们先看看下面的代码,了解一下字典的成员运算和索引运算。

通过age修将person字典中对应的值修改为25

通过索引操作向person字典中存入新的键值对

检查person字典中键值对的数量

对字典的键进行循环并通索引运算获取键对应的值

需要注意,在通过索引运算获取字典中的值时,如指定的键没有在字典中,将会引发KeyError异常。
字典类型的方法基本上都跟字典的键值对操作相关,可以通过下面的例子来了解这些方法的使用。例如,我们要用一个字典来保存学生的信息,我们可以使用学生的学号作为字典中的键,通过学号做索引运算就可以得到对应的学生;我们可以把字典中键对应的值也做成一个字典,这样就可以用多组键值对分别存储学生的姓名、性别、年龄、籍贯等信息,代码如下所示。

字典中的值又是一个字典(嵌套的字典)

使用get方法通过键获取对应的值,如果取不到不会引发KeyError异常而是返回None或设定的默认值

获取字典中所有的键值对

对字典中所有的键值对进行循环遍历

使用pop方法通过键删除对应的键值对并返回该值

使用popitem方法删除字典中最后一组键值对并返回对应的二元组
如果字典中没有元素,调用该方法将引发KeyError异常

setdefault可以更新字典中的键对应的值或向字典中存入新的键值对
setdefault方法的第一个参数是键,第二个参数是键对应的值
如果这个键在字典中存在,更新这个键之后会返回原来与这个键对应的值
如果这个键在字典中不存在,方法将返回第二个参数的值,默认为None

使用update更新字典元素,相同的键会用新值覆盖掉旧值,不同的键会添加到字典中

温馨提示:大家如果觉得这个专栏还不错,一定记得点赞收藏哟!

}

1,Python中自定义一些数据类型,用来表示不同的信息,以便于计算机更好的储存和计算。

2,为什么要定义数据类型,在解决现实问题的时候我们通常需要用编程的思维描述我们需要操作的对象,例如我们需要描述一个用户,他由多种属性组成,比如账号,密码,姓名,年龄,性别等等,这多种属性组合到一起,在计算机中就代表一位用户,而为了区分和表达这些属性,就定义了不同的数据类型,用对应的数据类型去表示对应的属性,以便于计算机更好的储存跟操作。

  数学意义上的整数(正整数,0,负整数的集合)

  Python中整数的取值范围,理论上是负无穷到正无穷,实际大小取决于电脑内存大小

  数学意义上的浮点数,也可以理解成小数

整数可以跟浮点数相互转化

所有的整数都可以被浮点数来表示,为什么还要设计整数的数据类型呢?因为相同的操作,整数要比浮点数快5-20倍

在Python中,字符串是用单引号,双引号,三引号引起来的字符序列,用来表示文本信息  str

用单引号或者双引号创建字符串没有任何区别,如果要创建的字符串中含有单引号,则用双引号定义该字符串,反之一样

单引号和双引号都只能创建一行字符串,三引号可创建多行字符串。三引号一般作为多行注释来使用。

任何序列类型中的元素,都有索引来表示它在序列中的位置

序列从左往右是从0开始,从右往左是从-1开始

取字符串对应索引的元素:str[index]

s[1:5]  表示取索引为1到4的元素,步长为1的时候可以省略

s[:5]  从开头开始切可以省略开头

s[1:]  切到末尾可以省略末尾

s[1::2]  步长为2进行切片,结果为:135

s[1::-2]  步长为负数则反向切片,结果为:1

Python中字符串可以用“+”来拼接

字符串和整数进行乘法运算表示反复拼接

dir(str)  dir是Python中的内建函数,它可以查询传入的对象的所有方法名称

1.2   和  ‘1.2‘  是不一样的数据类型,前者为浮点数,后者为字符串,但是他们可以互相转化

int(‘1‘)将字符串‘1‘转化为整数1

在Python中,当想使用特殊字符的时候可以用反斜杠“\”转义符

Python中用来表示有序可变的元素集合,元素可以是任意数据类型。

Python中列表的定义用中括号,元素与元素之间用逗号隔开

列表可以用加法进行拼接,也可以与整数相乘实现重复

list[2][1]  注意嵌套的元素获取

列表是Python中经常用到的数据类型,非常重要,它的操作也十分灵活

.append()  在列表末尾添加一个元素

.insert()  在指定索引位置添加一个元素

.extend()  扩展列表,元素为可迭代对象中的元素

.pop()  删除指定索引位置的元素,并返回该元素,未指定索引则默认删除最后一个元素

.remove()  从列表中删除一个指定值的元素,如不存在该值,则报错

.clear()  清空列表,原列表变成空列表

.copy()  返回一个列表的浅拷贝。

.count()  统计列表中指定值出现的次数

.index()  返回列表中指定值的第一个索引,不存在则报错,默认从第一个位置开始找,也可以指定起始位置

.sort()  对列表进行排序,默认是从小到大,当参数reverse = True时,则从大到小。注意,列表中的元素类型需要相同,否则抛出异常。

字符串是字符组成的序列,可以用list函数将其转换成单个字符的列表。

由字符组成的列表可以通过字符串的join方法进行拼接

元组是有序不可变元素的集合,元素可以是任意数据类型,可以理解为元组是不可变列表

在Python中,元组用小括号来定义,元素之间用逗号隔开

t = (‘a‘)  类型为字符串

t = (‘a‘,)  类型为元组

序列的索引和切片完全一致,参考字符串索引切片

元组元素不能修改,增加,删除,其他跟列表一致

因元组不可修改的特性,经常用在多变量赋值跟函数多返回值上

Python中的内建函数len,可以获取对象中包含几个元素

Python中的数据类型分为可变与不可变类型,其中列表,字典,集合为可变类型,其他基本类型为不可变类型。

不可变数据类型:创建后不可修改,只能重新创建

如果判断是否为可变类型

Python中有内建函数hash,可以对数据进行计算,凡是能被hash的,则为不可变类型,不能被hash的为可变类型

能被hash则会返回一段数字结果,不能被hash的则会抛出异常

散列类型用来表示无序的集合

集合表示无序且不重复的元素集合

集合用一对大括号来定义,元素用逗号隔开。集合中的元素必须是不可变类型。

s = {1,2,(3,4)}  集合中的元素必须是不可变类型

s = {}  代表空字典

add和update,可以简单的理解为add是添加一个元素,update是批量添加元素

s.add(3)  结果为{1,2,3},如果添加的元素不存在,则添加

s.update([2,3])  结果为{1,2,3},update中传入的参数为可迭代的,会将每个元素都更新入集合,不重复则添加

.pop()  随机删除集合中一个元素,并返回该元素,如集合为空,则抛出异常

.remove()  从集合中删除指定元素,如不存在则抛出异常

.discard()  从集合中删除指定元素,如不存在则无操作

&  交集  既属于A也属于B的所有元素集合

|  并集  A和B所有元素的集合

-  差集  属于A但不属于B的所有元素集合

^  反交集  除开A,B交集中的元素的其他元素集合

集合有去重的属性,所以可以利用它来去除序列中的重复项

   因为集合中的元素是无序的,所以无法便捷的获取特定的值。利用集合中的元素不重复的特性,是其映射不同的值,组成键值对,再利用相应的key来获取特定的值。

在Python中,字典就是键值对的集合,用大括号定义,键值对之间用逗号隔开,键和值用冒号分割。

字典中的键必须是不可变元素,并且不重复,值可以是任意数据类型

  ‘k1‘:‘a‘,

    ‘k1‘:‘a‘

字典中的键值对是无序的,利用key来获取相应的值

直接通过key索引的方式修改对应的值,如果key不存在则添加

d.pop(key,a)  删除指定key的值,并返回该值,若key不存在则返回a,若没有指定a,则抛出异常

d.popitem()  任意删除字典中的一个键值对,并以二元元组(key,value)的方式返回  结果为(‘a‘,‘b‘)

以字典中的索引key查询对应的值,如key不存在,则抛出异常

条件表达式的运算结果返回布尔值,True/False,表示真/假

布尔值可以和数值类型数据进行数学运算,这时True代表1,False代表0

在Python中,任意数据都可以用函数bool()转换成布尔型。

其中None,0(整数),0.0(浮点数),0.0+0.0j(复数),空字符串,空列表,空元组,空字典,空集合的布尔值为False,其他的都为True。

   None是Python中的特殊数据类型,它的值就是它本身None,表示空,不存在。

}

我要回帖

更多关于 python经典编程题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信