列表、元组和字典
列表、元组和字典
1. 通用序列操作
Pyhton中有六种内置序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象,其中列表、元组和字符串这三种序列是最常见的。
Python中的大部分序列都可以进行通用操作,包括索引、切片、序列相加(连接)、序列重复(乘法)、成员资格、长度、最大值和最小值。
1.1 索引
索引是按一定次序所做的标记,通过这个标记可以很快的查找和获取目标元素,像列表、元组等序列的索引就是数字编号。
Python中的序列给每个元素都分配了一个数字编号,代表了它在序列中的索引位置。Python中的索引从 “0” 开始计数,索引不仅可以从左往右编号,Python中的序列还支持从右往左编号,序列中最右边的元素索引为 “-1” 。
索引取值的语法格式:变量名[num]
索引取值的结果就是元素值,不带 “[]” 、 “()” 等符号。
索引取值
执行结果如下:
1.2 切片
切片就是取一段区间内的值,Python中所有的序列类型都可以进行切片操作。
切片操作的实现需要提供两个索引作为边界,第一个索引的元素包含在切片内,第二个索引的元素不包含在切片内,类似于数学上的 “左闭右开” 区间。
切片取值的语法格式:变量名[a:b] # a包含在切片内,b不包含在切片内
切片取值,如果序列为列表,则结果带 “[]” ;如果取单值,则结果为[num];如果序列为元组,则结果带 “()” ;如果取单值,则结果为(num, )
切片也支持负数取值,如果切片中a、b的值对应到序列中,发现a的值在b的右边,则结果显示为 “[]” 或 “()” 等空符号。
序列的索引下标可以超出其真实的索引长度,切片[a:b]中,a的默认值是0,b的默认值是序列的最后一个元素;[:b],获取索引从0到b-1的元素;[a:],获取索引从a到最后一个的元素
如果切片的两个索引都设置为空,即表示成[:],可以获取整个序列。
切片不仅可以表示成[a:b]的形式,Python中切片还提供了第三个参数,即步长,可以表示为[a:b:c], 默认情况下步长为1。注意:步长参数不能为0
步长不仅可以是正数,还可以是负数,当步长为负数时,结果从a的值开始向左获取元素。
步长为正数时,开始点必须小于结束点;步长为负数时,开始点必须大于结束点。否则输出结果为 “[]” 、 “()” 等空符号。
切片的基本操作
执行结果如下:
1.3 序列相加(连接)
序列之间可以使用 “+” 进行连接操作。
列表和列表连接的结果仍是列表,元组和元组连接的结果仍是元组,字符串和字符串连接的结果仍是字符串。注意:不同类型的序列是不能做连接的
序列相加
执行结果如下:
1.4 序列重复(乘法)
Python中,序列不仅可以做 “加法” ,还可以使用 “*” 做乘法。
序列重复
执行结果如下:
1.5 成员资格
成员资格是用来判断一个元素是否存在于序列中,Python中用运算符 “in” 来判断。 “in” 运算符会判断左边的元素是否存在于右边的序列中,如果存在就返回True,如果不存在则返回False。
要注意的是,只有当元素的类型和值都完全一致时,才算是存在于序列中,比如数字 “5” 和字符串 ”5“ 就是两种不同类型的元素。
如果判断元素是否存在于字符串序列中,则所参与运算的元素必须是字符串,否则会报错;换句话说, ”in“ 操作符的右边是字符串,那么左边也必须是字符串。
成员资格
执行结果如下:
1.6 长度、最大值、最小值和求和
Python中,可以用len()函数获取序列的长度,用max()函数获取序列的最大值,用min()函数获取序列的最小值,用sum()函数对序列求和。注意:由于字符串序列的元素都是字符串,所以sum()函数无法对字符串序列求和
长度、最大值、最小值和求和
执行结果如下:
2. 列表
2.1 增加元素
列表想要添加新元素,可以使用append()方法、insert()方法、extend()方法。append()和extend()两种方法都是在列表的最后增加元素。insert()方法需要传递两个参数,第一个参数是要插入的新元素的索引,第二个参数是要插入的元素值。insert()和append()一样,一次只能新增一个元素。
格式:
列表名.append(元素值) # 在列表的末尾增加单个元素值
列表名.insert(num, 元素值) # 在指定索引位置插入单个元素值
列表名.extend(其它列表名) # 在列表末尾增加其它列表的完整内容
列表名.extend([元素值1, 元素值2, …,]) # 在列表末尾增加多个元素值
增加元素
执行结果如下:
2.2 删除元素
Python提供了好几种对列表删除元素的方法。比如pop(),remove(),clear()。pop()方法可以有返回值;remove()方法会删除查找到的第一个元素,并且没有返回值。
不但可以使用列表自带的方法对列表元素进行删除,也可以使用关键字 ”del“ 来删除列表元素, ”del“ 关键字本质上是把变量从内存中删除。日常开发中,建议使用列表提供的方法删除数据。
格式:
列表名.pop() # 把列表的最后一个元素值删除
列表名.pop(num) # 把指定索引位置的元素值删除
列表名.remove(元素值) # 从列表中删除已存在的元素值
列表名.clear() # 清空列表,把列表中的所有内容删除
del 列表名[num] # 把指定索引位置的元素值删除(从内存中删除)
del 列表名 # 删除整个列表
删除元素
执行结果如下:
2.3 修改元素
列表可以通过索引获取单个元素,也可以通过索引修改其中的元素,使用方法就和变量赋值一样方便。
一个列表可以存储不同类型的数据,因此修改的新元素值也不需要跟原来的元素类型一样。注意:要修改元素的索引必须是已存在的索引,不能对超出列表长度的索引进行元素修改,否则会报错
格式:
列表名[num] = 元素值 # 修改元素值
修改元素
执行结果如下:
2.4 查找元素
查找元素在列表中的索引位置,可以用index()方法。但是要注意,如果元素不在列表中,就会报错。
格式:
列表名.index(元素值) # 根据出现的第一个元素值查找索引编号
查找元素
执行结果如下:
2.5 列表的其它操作
reverse()方法可以反转列表内容,和 ”[::-1]“ 类似;count()方法用于统计某个元素在列表中出现的次数;sort()方法用来对列表排序。
格式:
列表名.reverse() # 将列表的内容反转
列表名.count(元素值) # 统计该元素值在列表中出现的次数
列表名.sort() # 列表内容(字母、数字都行)按升序排列
列表名.sort(reverse=True) # 列表内容按降序排列
for 变量名 in 列表名: print() # 遍历列表的元素值
列表的其它操作
执行结果如下:
3. 元组
元组与列表相似,但是元组与列表最大的区别是,列表可以增加、删除、修改元素,而元组一旦创建就不能增加、删除、修改元素,只能删除整个元组。删除格式为:del 元组名
创建元组时,如果元组中只有一个元素,则这个元素后面必须要有 ”,” ,否则就不是元组。
元组可以通过index()方法查找元素在元组中的索引位置,因为元组不能修改,所以元组的查找速度要比列表更快;可以用count()方法统计元素出现的次数。
格式:
元组名.index(元素值) # 根据出现的第一个元素值查找索引编号
元组名.count(元素值) # 统计该元素值在元组中出现的次数
元组的基本操作
执行结果如下:
4.字典
4.1 定义字典
字典类型就和它的名字一样,可以像查字典一样去查找。字典用键值对存储数据,键值对之间用逗号隔开,键和值之间用冒号隔开,左边的称为键,右边的称为值,冒号右边空一格,键必须是唯一的。
格式:
字典名 = {key1: value1, key2: value2, …}
定义字典
执行结果如下:
4.2 增加键值对
要增加新的键值对,那么增加的键在原来的字典中必须是不存在的,否则就不是增加键值对了。
可以用update()方法合并字典,如果被合并的字典中包含已经存在的键值对,则会覆盖原有的键值对;也可以用update()方法同时增加多个键值对。
格式:
字典名[key] = value # 增加新的键值对,key必须不存在于原来的字典中
字典名.update(其它字典名) # 合并字典
字典名.update({key1: value1, key2: value2, …}) # 增加多个键值对
增加键值对
执行结果如下:
4.3 删除键值对
格式:
字典名.pop(key) # 删除键值对
字典名.clear() # 清空字典,删除字典中的所有内容
del 字典名[key] # 删除键值对
del 字典名 # 删除整个字典
删除键值对
执行结果如下:
4.4 修改键值对
要修改键值对,那么修改的键在原来的字典中必须是存在的。可以用update()方法同时修改多个键值对。
格式:
字典名[key] = value # 修改键值对,key必须存在于原来的字典中
字典名.update({key1: value1, key2: value2, …}) # 修改多个键值对
修改键值对
执行结果如下:
4.5 字典的其它操作
在开发中,字典更多的应用场景是:将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理。
字典和列表一样,如果只是利用赋值复制一个字典的话,那么无论原字典还是赋值复制的字典修改,都会让另一个字典做出相同的改变;如果利用copy()方法则能生成一个新的独立的字典,做出如何改变都不会影响原字典的内容。注意:copy进行的拷贝是浅拷贝,如果字典的元素值也是字典,那么copy只会影响最外层字典,元素内部还是赋值引用
fromkeys()方法用于创建一个新字典,用序列(列表、元组等)中的元素作为字典的key,第二个参数为字典的所有key对应的value。
使用get()方法可以获取键对应的值,如果键不存在,则返回默认值None。
使用keys()方法返回一个列表,里面包含了字典的所有键;keys()方法常常用来判断一个键是否存在于字典中,可以与 “in” 操作符组合使用。
使用values()方法返回一个列表,里面包含了字典的所有值;也可以判断一个值是否存在于字典中,可以与 “in” 操作符组合使用。
使用items()方法返回一个列表,里面包含了字典的所有键和所有值。
格式:
列表名 = [{}, {}, …] for 变量名 in 列表名: print() # 遍历列表中的字典
字典名.copy() # 复制一个新的独立的字典
dict.fromkeys(序列名) # 创建新字典,字典的key为序列中的元素,value为None
dict.fromkeys(序列名, value) # 创建新字典,字典的key为序列中的元素,key对应的值为value
字典名.get(key) # 获取键对应的值,键不存在则返回默认值None
字典名.keys() # 返回一个列表,里面包含了字典的所有键
key in 字典名.keys() # 判断键是否存在于字典中,返回True或False
字典名.values() # 返回一个列表,里面包含了字典的所有值
value in 字典名.values() # 判断值是否存在于字典中,返回True或False
字典名.items() # 返回一个列表,里面包含了字典的所有键和所有值
遍历列表中的字典
执行结果如下:
字典的复制操作
执行结果如下:
fromkeys方法
执行结果如下:
get方法
执行结果如下:
keys、values、items方法
执行结果如下:
5. 知识拓展–集合
Python中有一种内置类型叫做集合,它是一个非常有用的数据结构。它与列表的行为类似,主要的区别在于集合不包含重复的值,当存在重复值时,集合会自动去重。
定义空集合时,必须使用set()定义,而不能简单的用{};定义非空集合时,可以直接使用花括号 “{}” 定义,也可以使用set(列表名)来定义
在集合中添加新元素可以用add()方法。如果新的元素与原来的元素没有重复,则正常添加元素;如果重复,则不会添加,保证集合元素的唯一性。
在集合中删除元素可以用remove()方法。
Python自带的集合类型支持很多数学意义上的集合操作。
格式:
集合名 = set() # 定义空集合
集合名 = {元素值1, 元素值2, …} # 定义非空集合
列表名 = [元素值1, 元素值2, …] 变量名 = set(列表名) # 定义非空集合
集合名.add(元素值) # 在集合中增加元素
集合名.remove(元素值) # 在集合中删除元素
集合A & 集合B # 交集
集合A | 集合B # 并集
集合A — 集合B # 差集
集合A ^ 集合B # 对称差集
定义空集合
执行结果如下:
定义非空集合
执行结果如下:
增加与删除元素
执行结果如下:
数学意义上的集合操作
执行结果如下:
本文地址:https://blog.csdn.net/weixin_48158964/article/details/111059689
上一篇: python-并发编程