Python3中有三种组合数据类型,分别为:
- 序列类型:字符串(str)、元组(tuple)、列表(list)
- 集合类型:集合(set)
- 映射类型:字典(map)
序列类型
Python序列类似于其他语言中的数组。支持双向索引。第一个元素为0,最后一个元素为-1
列表
内置可变序列,所有元素放在一对中括号中,并用逗号分隔。当列表元素增加或者删除时,列表对象自动进行扩展或者收缩内存,保证元素之间没有缝隙。一个列表中的元素可以各不相同。
创建和删除
使用=
直接将一个列表赋值给变量即可创建列表对象。也可以使用list()
函数将元组、range对象、字符串和其他类型的可迭代对象转化为列表
当列表不再使用时可以用del
命令删除整个列表。如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。
元素的增加
- 使用
+
运算符将元素添加到列表中(严格意义上来讲,这并不是真的为列表添加元素,而是创建一个新列表并将原列表中的元素和新元素依次复制到新列表的内存空间,因此效率较慢) - 使用
append()
方法,原地修改列表,效率较高 - 直接修改序列变量将会改变所指向的内存地址,而不是改变其所指向内存中的值。
- 原地操作(通过下标修改、通过序列本身提供的方法)将不会改变所指向的内存地址
extend()
方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。属于原地操作insert()
方法可以将元素添加至列表的指定位置。需要移动后面所有的元素,效率较低。- 使用乘法扩展列表对象
当被扩展列表中的元素是引用的时候,扩展后的列表中的元素是相等的引用,如果对其中某一个引用所指向的地址空间进行修改,指向同一片区域的引用对应的值也会修改,根本原因在于乘法操作所进行的是浅复制,后面有对浅复制的介绍
元素的删除
- 使用
del
命令删除列表中指定位置上的元素 ,原地操作 - 使用列表的
.pop()
方法删除并返回元素,默认删除最后一个位置的元素 remove()
方法删除首次出现的指定元素,如果不存在抛出异常
解决方法,可以使用x[:]
深复制,详见我之前的博客:Python a和a[:]的区别
或者使用del
从后往前进行删除
元素的访问和计数
- 使用下标访问,如果超出范围则抛出异常
- 使用
index()
方法获取指定元素首次出现的下标。若不存在指定元素抛出异常 - 使用
count()
方法统计指定元素在列表对象中出现的次数
切片操作
适用于列表、元组、字符串、range对象
语法:list[begin:end:step]
返回一个新列表
切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表
通过切片操作可以修改和删除列表中的部分元素,甚至可以通过切片操作为列表对象增加元素
切片操作是原位操作,不会修改所指向的地址空间
切片操作是一种浅复制
浅复制:把子列表的引用复制到新列表中,这样的话修改任何一个都会影响另外一个
当我们对某个元素进行修改的时候其实修改的是他的引用,如果我们修改的是引用所指向的空间,那么所有指向该空间的值都会发生改变
排序
这里的reversed对象好像只能访问一次
常用方法
常用内置函数
len(列表)
返回列表中元素的个数max() min()
返回最大元素或者最小元素sum()
对列表元素进行求和,同样适用于元组、range
zip()
返回可迭代的zip对象
enumerate()
枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组。该函数对元组、字符串同样有效
列表推导式
在列表推导式中使用多个循环实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素
元组
元组和列表类似,但属于不可变序列
和列表的区别:
- 元组中的数据一旦定义就不允许更改,也没有对应的修改的方法
- 从效果上看,
tuple()
冻结列表,而list()
融化元组
优点: - 速度比列表快
- 不需要担心被修改,更安全
- 元组可以当作字典键(特别是包含字符串、树枝和其他元组这样不可变数据的元组)。列表永远不能当作字典键使用,因为列表是可变的。
创建与删除
- 使用
=
将一个元组赋值给变量,需要注意的是一个元素的时候必须在元素后面加上逗号,否则将会当作里面的元素 - 使用
tuple()
函数将其他序列转换为元组 - 使用
del
删除元组对象,不过不能删除元组中的元素
序列解包
集合
集合是无序可变序列,使用一对大括号界定,元素不可重复,用一个集合中每个元素都是唯一的。
集合中只能包含数字、字符串、运足等不可变类型(可哈希类型)的数据,而不能包含列表、字典、集合等可变类型的数据
创建和删除
- 等号赋值
set()
函数进行转换,而且会自动去重- 使用
del
删除整个集合 - 使用
pop()
弹出并删除其中一个元素,remove()
方法直接删除指定元素,clear()
方法清空集合
集合操作
字典
字典是无需可变序列,是实现键值对映射的数据结构
字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息。字典中的键可以为任意不可变元素,如整数、实数、复数、字符串、元组等。
定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号中
globals()返回包含当前作用域内所有全局变量和值的字典
locals()返回包含当前作用域内所有局部变量和值的字典
创建和删除
- 等号赋值
- 使用
dict()
利用已有数据创建字典
元素的读取
- 以键作为下标可以读取字典元素,若键不存在则抛出异常
- 用
get()
方法获取指定键对应的值,并且在键不存在的时候返回指定值
- 使用
items()
方法可以返回字典的键、值对列表 - 使用
key()
方法返回键列表 - 使用
values()
方法返回字典的值列表
元素的添加和修改
- 以指定键为下标为字典赋值时,若键存在则修改该键的值,若不存在则添加一个键值对
- 使用
update()
方法将另一个字典的键值对添加到当前字典对象
- 使用
del
删除字典中指定键的元素 - 使用
pop()
方法删除并返回指定键的元素 - 使用
clear()
方法删除字典中的所有元素 - 使用
popitem()
方法删除并返回字典中第一个元素