文章目录
- 列表
- 创建列表
- 读取元素
- 遍历列表
- 修改元素
- 检索元素
- 删除元素
- 字符串列表的转化
- 其它常用函数
- 元组
- 创建元组
- 访问元组
- 修改元组
- 删除元组
- 常见操作
- 常见使用场景
- 字典
- 创建字典
- 字典查找
- 遍历字典
- 添加修改
- 字典检索
- 删除元素
- 常用函数
- 集合
- 创建集合
- 添加元素
- 删除元素
- 集合运算符
- 数学集合运算
- 组合数据类型的高级特性
- 切片
- 迭代
- 列表生成式
- 生成器
- 迭代器
列表
列表(list)是Python内置的一种数据类型,是一种最具灵活性的有序集合对象类型,可以随时添加和删除其中的元素。
创建列表
通常使用左右方括号(即:[ 和 ])将数据元素包裹起来创建一个列表,如下所示:
list1 = [1,2,3,4,5]
list2 = ["a","b","c","d"]
list1是一个有5个整型变量的列表,list2是一个有4个字符串变量的列表。
另一种创建方式
注:直接调用不带参的list()函数时,将返回一个空列表,即:[ ]。
创建列表时,列表中的元素的数据类型可以各不相同,如int,string类型,甚至可以是一个列表类型,如在下列中[10,20]为一个list类型,它作为list3的一个元素存在于list3中。
读取元素
列表的下标是从0开始
索引可正可负,负数是从-1开始,即从最后一个元素开始。
下标超出list大小,会报错。
遍历列表
遍历一个列表元素的最常见方式是使用for循环,常见的有以下两种方式。
- 用len()函数计算出列表长度再进行遍历操作
- 直接遍历
修改元素
列表是可变的
- 指定下标的值对元素进行修改
- 使用“+”将一个新列表附加在原列表尾部
- 在列表中追加元素
- 使用append()方法向列表的尾部添加一个新元素
- 使用extend()方法将一个列表添加在原列表的尾部。
- 使用insert()方法将一个元素插入到列表的指定位置
检索元素
- 使用count()方法计算列表中某个元素出现的次数
- 使用in运算符检查某个元素是否在列表中
- 使用index()方法返回某个元素在列表中的准确位置。
删除元素
- 使用del语句删除某个特定位置的元素
- remove()删除某个特定值的元素
- pop()方法弹出(删除)指定位置的元素
字符串列表的转化
- list(str) 将字符串str转化为单个字母的列表
- split()方法将字符串拆成单词
- join()将字符串列表合成为一个字符串,是split的逆操作。join是字符串的方法,所以必须在分隔符上调用它,并传入列表作为实参。
其它常用函数
- len()返回列表中的元素个数
- max()和min()求列表最大或最小的元素
- sorted()对列表进行排序
- reversed()对列表进行逆序返回迭代器
- sum()对数值型列表的元素进行求和运算
- copy()使用等号并不能复制出一个新的列表,需要用列表自带的copy函数。
- copy方法是浅复制,对于列表里有列表,不会复制里面的列表,还是其引用,可以用copy模块里的deepcopy()进行深复制
元组
元组(tuple)是值的一个序列。其中的值可以是任何类型,并且按照整数下标索引,与列表类似。但元组中的元素不能修改,列表中的元素可以修改。
不可变的tuple,使代码更安全,如果能用tuple替代list就尽量用tuple。当后续介绍字典类型时,会发现字典的键必须是不可变的,因此元组可以用作字典的键,但列表不能。
创建元组
- 直接用
,
隔开的一列值,使用=
赋值给变量,虽然不是必须,但元组常常用小括号括起来。 - 使用内置函数tuple
如何定义一个只有一个元素的tuple
访问元组
元组可以使用下标索引来访问元组的值。
修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合。
删除元组
元组的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。
常见操作
元组的常用函数与列表类似,除了那些违反不变性的函数。
然而,当元组中存在列表元素项时,就可以使用上述如append等方法修改list中的元素,达到间接修改元组元素的目的。
常见使用场景
可变长参数是元组的最常用场景:
在这里,*号可称为收集操作符,也就是把传入的参数收集到一个元组中。
字典
字典是一种集合,它不是序列。字典可以看成元素对构成的列表,其中一个元素是键,另一个元素是值。
创建字典
与列表、元组不同,字典是以{
和}
定义的,而且字典中每个元素包含两个部分,即键和值。
下面给出一些实例,展示了各种语法,这些语法产生的是相同的字典。
字典查找
字典定义好后,可以通过键来查找值。
没法通过索引值来找键,只能暴力去找
遍历字典
用循环语句来遍历字典中的每个元素的键和值。
添加修改
添加和修改方法相同,都是使用 “字典变量名[键名]=键值” 的形式,如果原来已经存在是修改,不存在就是添加。
字典检索
可以使用in
运算符来测试某个特定的键是否在字典中。表达式k in d (d为字典) 查找的是键,而不是值。
查看一个值是不是出现在字典中,可以使用方法values,它返回该字典的所有值的一个集合,然和检索当前值是否在集合中即可。
删除元素
- 使用del语句删除指定键的元素或整个字典。
- 使用clear()方法清空字典
- pop()删除并返回指定键的元素,popitem()弹出随机的项。
常用函数
- keys():将字典中的键以集合形式返回
- copy():返回一个具有相同键-值对的新字典,和列表一样是浅复制
- fromkeys():使用给定的键创建新的字典,每个默认对应的值为None
- get():get方法访问字典,即使没有该键也不会报错。
- setdefault():如果键不存在,则创建键值对。
- update():利用一个字典项更新另一个字典,若有相同的键存在,则会进行覆盖,类似于把两个字典合并到一起。
集合
集合 (set) 是0个或多个对象引用的无序组合,这些对象所引用的对象都是可哈希运算的。集合是可变的,因此可以很容易地添加或移除数据项,但由于其中的项是无序的,因此,没有索引位置的概念。
在集合中,任何元素都没有重复,这是集合的一个非常重要的特点。
set和dict类似,是一组key的集合,但不存储value,且在set中没有重复的key。
创建集合
有快捷方式和构造函数两种
添加元素
通过add(key)方法添加元素到set中,可以重复添加,但不会有效果。
删除元素
- remove(key) 删除元素,元素不在会报错
- discard(key) 删除元素,元素不在不会报错
- clear()删除集合的所有元素(使它成为空集)
集合运算符
- len():确定集合中的元素数量。
- in:判断元素是否在集合中
- for:遍历集合中的元素
数学集合运算
- 交集:
&
或者 intersection - 并集:
|
或 union - 差集:
-
或 difference - 对称差(也称补集):
^
或 symmetric_difference - 子集和超集:issubset 和 issuperset
- 常用函数
组合数据类型的高级特性
切片
L[a:b]表示从索引a开始取,直到索引b为止,但不包括索引b。
支持倒数切片。L[-1]取倒数第一个元素
迭代
列表这种数据类型有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有没有下标,都可以迭代。
- 字典的迭代
- 集合的迭代
- 字符串的迭代
- Iterable类型——可通过collections.abc模块的Iterable类型判断该对象是否是一个可迭代的对象。
- Python内置的enumerate函数可以把一个list变成 ‘索引-元素’ 对,这样就可以在for循环中同时迭代索引和元素本身。
列表生成式
- 一层循环
- 二层循环
- 集合(set)和 字典(dict)也有生成式方式
生成器
通过列表生成式,可以直接创建一个列表,但由于计算机内存有限,对于一个特别大的列表是无法直接创建的。在Python中,有生成器(generator)可以一边循环一边计算,从而节省大量空间。
- 简单生成器:将列表生成式的
[]
改为()
,就创建一个generator。 - 带yield语句的生成器:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
- 实质上,每次循环,函数会执行到yield,然后返回,等下次循环在继续往下执行到下一个yield。下面的栗子可以很好地看出来。
迭代器
Python的for循环本质上就是通过不断调用next()函数实现的。
例如:
实际上完全等价于