列表和元组的概念
- 列表、元组:程序员在代码中批量表示数据的方式
- 列表和元组的大部分功能都是相同的,但是有一个明显的差别:列表可以修改,但是元组不能修改
- 列表相当于散装辣条,元组相当于袋装辣条
列表的创建和下标访问
可以在创建列表的时候使用 [ ] 指定列表的初始值,元素之间使用英文逗号分隔
a = [1,2,3,4] print(a)
可以在一个列表里放不同类型的元素
a = [1,'hello',True,[2,3,4]] print(a)
可以使用下标(索引)访问的方式获取列表中的元素(下标访问运算符[ ])
Python中的下标从0开始计数(C语言开创的先例)
a = [1,2,3,4] print( a[2] )
可以使用下标修改列表中的元素
a = [1,2,3,4] a[2] = 66 print(a[2])
可以使用内建函数len()来获取列表的长度(元素个数),和字符串很相似
a = [1,2,3,4] print( len(a) )
使用下标访问列表元素时,下标大小不能超过最大值
值得注意的是,列表的下标可以写成负数
a = [1,2,3,4] print( a[len(a) - 1] ) print( a[-1] )
列表的切片操作
a = [1,2,3,4]
print( a[1:3] )
- 如上所示,切片操作中[ ]里面的两个数字表示了一段区间
- 1表示开始的下标,3表示结束的下标,但这是一个前闭后开的区间(不包括下标为3的下标)
- 切片操作是一个比较高效的操作,只会取出原来列表的一个部分,不涉及“数据的拷贝”
使用切片时省略边界
带有步长的切片操作
列表的遍历操作
遍历:将一个列表中的每一个元素依次取出来,并对它们进行某种操作
遍历的操作有很多种,我们在下面一一列举,但是基本上第一种使用最为频繁
创建elem变量在for循环中遍历列表元素
创建变量i,以下标的方式遍历列表中的元素
创建变量i,在while循环中以下标的方式遍历列表中的元素
列表的插入操作
使用append()函数往列表末尾新增一个元素
使用insert()函数往列表中的任意位置添加元素
列表的查找和删除
使用in来判定某个元素在列表中是否存在
使用index,根据内容来寻找某个元素在该列表中的下标
使用pop删除列表最末尾的元素
使用pop删除任意位置的元素(根据下标)
使用remove,根据值来删除对应的元素
列表的拼接
使用+拼接列表
生成了一个更大的列表,原有的列表保持不变
使用extend拼接列表(extend没有返回值)
将后一个列表的内容拼接到前一个列表上
使用+=拼接列表(不推荐,相比于第二种方式多了很多操作)
元组的操作
元组的创建:使用 ( ) 或者 turple( )
但值得注意的是,下标访问依旧采用 [ ]
元组的很多操作和列表都是相同的,但这些操作指的是只读操作,因为元组是不可以更改的
函数中的return语句返回多个值的时候,实际上是按照元组的方式进行工作的
然后我们采用多元赋值的方式接收元组
如下图代码所示
元组的优势:协同开发时保护实际参数
协同开发时,A写好的函数让B去调用
但是B会有疑虑:我将参数传给这个函数,那么这个函数要是修改我传的参数怎么办
我们则可以借助元组解决这个问题,因为元组是不能修改的
字典的创建
- 键值对是计算机中一个非常重要的概念
- 键(key)、值(value):根据key能够快速找到value(映射关系)
- Python的字典中可以包含很多的键值对,但是所有的键不能重复
- 字典中的键的类型不一定都一样,值的类型也不一定都一样
- 字典对于键的类型有约束,但是对于值的类型没有约束
字典查找key
使用 in / not in 来判定某个 key 在字典中是否存在(与value无关)
使用 [ ] 根据 key 来获取 value
- 对于列表来说,使用 in 比较低效(需要遍历列表),使用 [ ] 比较高效(类似于数组取下标)
- 对于字典来说,两者都非常高效(字典的背后使用了特殊的数据结构:哈希表)
字典的新增、修改和删除
使用 [ ] 新增和修改字典的元素
使用 pop 方法,根据 key 删除键值对
理解哈希表的效率(字典的背后是哈希表)
- 遍历:将一个可迭代对象里面包含的元素依次取出来,并进行一些操作,整个过程要求不重不漏
- 字典被设计的初衷是为了增删查改,而不是为了遍历
- 字典属于哈希表,进行增删查改的效率很高(常数级的时间复杂度,操作的时间不会因为元素数量而变化),而遍历的效率要差一些
- 数据结构最重要的就是哈希表
字典的遍历
下图所示为典型的例子
可哈希的类型(可作为key的类型)
- 不是所有的类型都可以作为字典的key
- 字典的本质是一个哈希表,哈希表的key的要求就是“可哈希的”,也就是可以使用hash()计算出一个哈希值
- 不可变的对象一般就是“可哈希的”,可变的对象一般就是“不可哈希的”
- 列表和字典都是“不可哈希的”
- 字典、列表和元组都是Python中非常常用的内置类型,内部可以包含不同的元素(容器或者集合类)