Python从入门到实战(一)——Python基础
Python从入门到实战(二)——程序流程控制
Python从入门到实战(三)——组合数据类型
Python从入门到实战(四)——函数
Python从入门到实战(五)——模块和包
Python从入门到实战(六)——文件
Python从入门到实战(七)——面向对象
Python从入门到实战(八)——异常
Python从入门到实战(九)——多线程
Python从入门到实战(十)——爬虫
文章目录
列表
列表(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()函数实现的。
例如:
实际上完全等价于