序列
索引(Indexing)
- 序列中的每一个元素都有一个编号,也称为索引。
- 索引从0开始递增,即下标为0表示第一个元素,依次类推。
- Python 中的索引也可以为负数,这个索引从右向左计数,也就是从最后一个元素开始计数,即最后一个元素的索引值为-1,依此类推。
注意:在采用负数作为索引值时,是从 -1 开始的,而不是从 0 开始的,即最后一个元素的下标为 -1,这是为了防止与第一个元素重合。
切片(Slicing)
切片操作是访问序列中元素的另一种方法,可以访问一定范围的元素。通过切片操作可以生成一个新的序列。
sname[start : end : step]参数说明如下:
- sname:表示序列的名称。
- start:表示切片的开始位置(包括该位置),如果不指定,则默认为0。
- end:表示切片的截止位置(不包括该位置),如果不指定,则默认为序列的长度。
- step:表示切片的步长,如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略。
说明:在进行切片操作时,如果指定了步长,那么将按照该步长遍历序列的元素,否则将一个一个遍历序列。
序列的相加(Adding)
在 Python 中,支持两种相同类型的序列相加操作,即将两个序列进行连接,使用加(+)运算符实现。
说明:在进行序列相加时,相同类型的序列是指同为列表、元组、集合等,序列中的元素类型可以不同。但是不能是列表和元组相加,或者是列表和字符串相加。
乘法(Multiplying)
使用数字n乘以一个序列会生成新的序列,新序列的内容是原来序列被重复n次的结果。
检查某个元素是否是序列的成员(元素)
在 Python 中,可以使用in关键字检查某个元素是否是序列的成员,即检查某个元素是否包含在此序列中。
value in sequence其中,value 表示要检查的元素;sequence 表示指定的序列。
在 Python 中,也可以使用 not in 关键字实现检查某个元素是否不包含在指定的序列中。
计算序列的长度、最大值和最小值
在 Python 中,有内置函数计算序列的长度、最大值和最小值;
分别是使用 len() 函数计算序列的长度,即返回序列包含多少个元素;使用 max() 函数返回序列中的最大值元素;使用 min() 函数返回序列中的最小元素。
除了这3个内置函数,Python 还提供了如表所示的内置函数。
| 函数 | 作用 |
|---|---|
list() | 将序列转换为列表 |
str() | 将序列转换为字符串 |
sum() | 计算元素和 |
sorted() | 对元素进行排序 |
reversed() | 反向序列中的元素 |
enumerate() | 将序列组合为一个索引序列,多用在for循环中 |
列表(list)
列表的创建和删除
1 . 使用赋值运算符直接创建列表
创建列表时,可以使用赋值运算符 “=” 直接将一个列表赋值给变量。
listname = [element 1,element 2,element 3,…,element n]listname表示列表的名称,可以是任何符合 Python 命名规则的标识符;element 1 、element 2、element n 表示列表中的元素,个数没有限制,并且只要是 Python 支持的数据类型就可以。
说明:在使用列表时,虽然可以将不同类型的数据放入到同一个列表中,但是通常情况下,不建议这么做,而是在一个列表中只放入一种类型的数据,这样可以提高数据的可读性。
2 . 创建空列表
在 Python 中,创建空列表,可以使用下面的代码。
emptylist = []3 . 创建数值列表
在Python中,可以使用 list() 函数直接将 range() 函数循环出来的结果转换为列表。
list() 函数的基本用法如下:
list(data)其中,data 表示可以转换为列表的数据,其类型可以是 range 对象、字符串、元组或者是其他可迭代类型的数据。
说明:使用
list()函数不仅能通过 range 对象创建列表,还可以通过其他对象创建列表。
4 . 删除列表
对于已经创建的列表,不再使用时,可以使用 del 语句将其删除,语法格式如下:
del listname其中,listname 为要删除列表的名称。
说明:del 语句在实际开发中并不常用,因为 Python 自带的垃圾回收机制会自动销毁不用的列表,所以即使不手动将其删除, Python 也会自动将其回收。
在删除列表前,一定要保证输入的列表名称是已经存在的,否则将出现错误。
访问列表元素
将列表的内容直接输出比较简单,可以直接使用 print() 函数。
print(untitle)要获取列表 untitle 中索引为2的元素,可以这样实现:
print(untitle[2])遍历列表
1 . 直接使用 for 循环实现
直接使用 for 循环遍历列表,只能输出元素的值,语法格式如下:
for item in listname:
# 输出 item2 . 使用 for 循环和 enumerate() 函数实现
使用 for 循环和 enumerate() 函数可以实现同时输出索引值和元素内容,语法格式如下:
for index,item in enumerate(listname):
# 输出 index 和 item参数说明如下:
- index:用于保存元素的索引。
- item:用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可。
- listname:为列表名称。
添加、修改和删除列表元素
1 . 添加元素
向列表中添加元素,可以直接使用列表对象的 append() 实现。语法格式如下:
listname.append(obj)其中, listname 为要添加元素的列表名称; obj 为要添加到列表末尾的对象。
将一个列表中的全部元素添加到另一个列表中,可以使用列表对象的 extend() 方法实现。语法格式如下:
listname.extend(seq)其中, listname 为原列表; seq 为要添加的列表。语句执行后, seq 的内容将追加到 listname 的后面。
2 . 修改元素
修改列表中的元素只需要通过索引获取该元素,然后再为其重新赋值即可。
3 . 删除元素
(1) 根据索引删除
删除列表中的指定元素与删除列表相似,也可以使用 del 语句实现,不同的是,在指定列表名称时,换为列表元素。
(2) 根据元素值删除
如果想要删除一个不确定位置的元素(根据元素值删除),可以使用列表对象的 remove() 方法实现。
对列表进行统计计算
1 . 获取指定元素出现的次数
使用列表对象的 count() 方法可以获取指定元素在列表中出现的次数,基本语法格式如下:
listname.count(obj)其中, listname 表示列表的名称; obj 表示要判断的是否存在的对象,这里只能进行精准匹配,即不能是元素值的一部分。
2 . 获取指定元素首次出现的下标
使用列表对象的 index() 方法可以获取指定元素在列表中首次出现的文章(索引),基本语法格式如下:
listname.index(obj)参数说明如下:
- listname:表示列表的名称。
- obj: 表示要查找的对象,这里只能进行精准匹配。如果指定的对象不存在,否则返回异常。
- 返回值:首次出现的索引值。
3 . 统计数值列表的元素和
在 Python 中,提供了 sum() 函数用于统计数值列表中各元素的和,语法格式如下:
sum(iterable[,start])参数说明如下:
- iterable:表示要统计的列表。
- start:表示统计结果是从哪个数开始(将统计结果加上 start 所指定的数),是可选参数,如果没有指定,则默认为0。
对列表进行排序
1 . 使用列表对象的 sort() 方法实现
使用 sort() 方法可以用于对原列表中的元素进行排序。排序后原列表中的元素顺序将发生改变。语法格式如下:
listname.sort(key=None,reverse=False)参数说明如下:
- listname:表示要进行排序的列表。
- key:表示指定一个从每个列表元素中提取一个比较键(例如,设置“key=str.lower”表示在排序时不区分字母大小写。)
- reverse:可选参数,如果将其值指定为 True ,则表示降序排列;如果将其值指定为 False ,则表示升序排列。默认为升序排列。
使用 sort() 方法对字符串列表进行排序时,先对大写字母进行排序,然后再对小写字母进行排序。
不建议使用
sort()方法对中文内容的列表排序。
2 . 使用内置的 sorted() 函数实现
使用 sorted() 函数进行排序时,原列表的元素顺序不变。语法格式如下:
sorted(iterable,key=None,reverse=False)参数说明如下:
- iterable:表示要进行排序的列表名称。
- key:表示指定一个从每个列表元素中提取一个比较键(例如,设置“key=str.lower”表示在排序时不区分字母大小写)。
- reverse:可选参数,如果将其值指定为 True ,则表示降序排列;如果将其值指定为 False ,则表示升序排列。默认为升序排列。
说明:列表对象的
sort()方法和内置sorted()函数的作用基本相同,所不同的是使用sort()方法时,会改变原列表的元素排列顺序,
但是使用sorted()函数时,会建立一个原列表的副本,该副本为排序后的列表。
列表推导式
(1) 生成指定范围的数值列表
语法格式如下:
list = [Expression for var in range]参数说明如下:
- list:表示生成的列表名称。
- Expression:表达式,用于计算新列表的元素。
- var:循环变量。
- range:采用
range()函数生成的 range 对象。
(2) 根据列表生成指定需求的列表
语法格式如下:
newlist = [Expression for var in list]参数说明如下:
- newlist:表示新生成的列表名称。
- Expression:表达式,用于计算新列表的元素。
- var:变量,值为后面列表的每个元素值。
- list:用于生成新列表的原列表。
(3) 从列表中选择符合条件的元素组成新的列表
语法格式如下:
newlist = [Expression for var in list if condition]参数说明如下:
- newlist:表示新生成的列表名称。
- Expression:表达式,用于计算新列表的元素。
- var:变量,值为后面列表的每个元素值。
- list:用于生成新列表的原列表。
- condition:条件表达式,用于指定筛选条件。
元组(tuple)
元组(tuple)是 Python 中另一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成的,但是它是不可变序列,因此,元组也可以称为不可变的列表。在形式上,元组的所有元素都放在一对小括号 “()” 中,两个相邻元素间使用逗号 “,” 进行分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入元组中,并且同一个元组中,元素的类型可以不同,因为它们之间没有任何关系。在通常情况下,元组用于保存程序中不可修改的内容。
说明:从元组和列表的定义上看,这两种结构比较相似。它们之间的主要区别就是一个是不可变序列,另一个是可变序列,即元组中的元素不可以单独修改,而列表则可以任意修改。
元组的创建与删除
1 . 使用赋值运算符直接创建元组
创建元组时,也可以使用赋值运算符 “=” 直接将一个元组赋值给变量。具体的语法格式如下:
tuplename = (element 1,element 2,element 3,···,element n)其中,tuplename表示元组的名称,可以是任何符合 Python命名规则的标识符;element 1、element 2、element 3、element n表示元组中的元素,个数没有限制,并且只要是 Python 支持的数据类型就可以。
注意:创建元组的语法与创建列表的语法类似,只是创建列表时使用的是中括号 “[]”,而创建元组时使用的是小括号”()”。
在 Python 中,虽然元组是使用一对小括号将所有的元素括起来的,但是实际上,小括号并不是必需的,只要将一组值用逗号分隔开来,Python 就可以认为它是元组。
如果要创建的元组只包括一个元素,则需要在定义元组时,在元素的后面加一个逗号 “,” 。
说明:在 Python 中,可以使用
type()函数测试变量的类型。
2 . 创建空元组
在 Python 中,也可以创建空元组。语法格式如下:
emptytuple = ()空元组可以应用在为函数传递一个空值或者返回空值时。
3 . 创建数值元组
在 Python 中,可以使用 tuple() 函数直接将 range() 函数循环出来的结果转换为数值元组。tuple() 函数的基本语法如下:
tuple(data)其中, data 表示可以转换为元组的数据,其类型可以是 range 对象、字符串、元组或者是其他可迭代类型的数据。
说明:使用
tuple()函数不仅能通过 range 对象创建元组,还可以通过其他对象创建元组。
4 . 删除元组
对于已经创建的元组,不再使用时,可以使用 del 语句将其删除。语法格式如下:
del tuplename其中,tuplename 为要删除元组的名称。
说明:del 语句在实际开发时并不常用。因为 Python 自带的垃圾回收机制会自动销毁不用的元组,所以即使不手动将其删除,Python 也会自动将其回收。
访问元组元素
将元组的内容输出,可以直接使用 print() 函数。语法格式如下:
print(untitle)在输出元组时,是包括左右两侧的小括号的。如果不想输出全部的元素,也可以通过元组的索引获取指定的元素。语法格式如下:
print(untitle[0])另外,对于元组也可以采用切片的方式获取指定的元素。
修改元组元素
元组是不可变系列,不能对它的单个元素值进行修改。但是,元组也不是完全不能修改,可以对元组进行重新赋值。
另外,还可以对元组进行连接组合。
说明:在进行元组连接时,连接的内容必须都是元组。不能将元组和字符串或者列表进行连接。
元组推导式
使用元组推导式可以快速生成一个元组,它的表现形式与列表推导式类似,只是将列表推导式中的中括号 “[]” 修改为小括号 “()” 。
元组与列表的区别
元组与列表都属于序列,都可以按照特定顺序存放一组元素,而且类型不受限制,只要是 Python 支持的类型都可以。
列表和元组的区别主要体现在以下几个方面:
- 列表属于可变序列,它的元素可以随时修改或者删除,而元组属于不可变序列,其中的元素不可以修改,除非整体替换。
- 列表可以使用
append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而元组则没有这几个方法,因为不能向元组中添加和修改元素,同样,也不能删除元素。 - 列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
- 元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组而不使用列表。
- 列表不能作为字典的键,而元组则可以。
字典(dictionary)
字典与列表类似,也是可变序列,不过与列表不同,它是无序的可变序列,保存的内容是以“键——值对”的形式存放的。键是唯一的,而值可以有多个。字典在定义一个包含多个命名字段的对象时很有用。
说明:Python 中的字典相当于Java或者 C++ 中的 Map 对象。
字典的主要特征如下:
- 通过键而不是通过索引来读取。
字典有的时候也称为关联数组或者散列表(hash),它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
- 字典是任意对象的无序集合。
字典是无序的,各项是从左到右随机排序的,即保存在字典中的项没有特定的顺序,这样可以提高查找顺序。
- 字典是可变的,并且可以任意嵌套。
字典可以在原处增长或者缩短(无须生成一份副本),并且它支持任意深度的嵌套(它的值可以是列表或者其他的字典)。
- 字典中的键必须唯一。
不允许同一个键出现两次,如果出现两次,则后一个值会被记住。
- 字典中的键必须不可变。
字典中的键是不可变的,所以可以使用数字、字符串或者元组,但不能使用列表。
字典的创建和删除
定义字典时,每个元素都包含两个部分“键”和“值”。
创建字典时,在“键”和“值”之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素放在一个大括号“{}”中。语法格式如下:
dictionary = {'key1':'value1','key2':'value2',···,'keyn':'valuen',}参数说明如下:
- dictionary:表示字典名称。
- key1、key2···keyn:表示元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组。
- value1、value2···valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
同列表和元组一样,也可以创建空字典。在 Python 中,可以使用下面两种方法创建空字典:
dictionary = {}或者
dictionary = dict()Python 的 dict() 方法除了可以创建一个空字典外,还可以通过已有数据快速创建字典。主要表现为以下两种形式:
1 . 通过映射函数创建字典
语法格式如下:
dictionary = dict(zip(list1,list2))参数说明如下:
- dictionary:表示字典名称。
- zip() 函数:用于将多个列表或元组相应位置的元组组合为元组,并返回包含这些内容的zip对象。如果想得到元组,可以将zip对象使用
tuple()函数转换元组;如果想得到列表,则可以使用list()函数将其转换为列表。- list1:一个列表,用于指定要生成字典的键。
- list2:一个列表,用于指定要生成字典的值。如果 list1与 list2 的长度不同,则与最短的列表长度相同。
2 . 通过给定的“键——值对”创建字典
语法格式如下:
dictionary = dict(key1=value1,key2=value2,···,keyn=valuen)参数说明如下:
- dictionary:表示字典名称。
- key1、key2···keyn:表示元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者是元组。
- value1、value2···valuen:表示元素的值,可以是任何整数类型,不是必须唯一。
在 Python 中,还可以使用dict对象的fromkeys()方法创建值为空的字典,语法如下:
dictionary = dict.fromkeys(list1)参数说明如下:
- dictionary:表示字典名称。
- list1:表示字典的键的列表。
另外,还可以通过已经存在的元组和列表创建字典。
同列表和元组一样,不再需要的字典也可以使用del命令删除。
另外,如果只是想删除字典的全部元素,可以使用字典对象的clear()方法实现。执行clear()方法后,原字典将变为空字典。例如,下面的代码清除字典的全部元素:
dictionary.clear()通过键—值对访问字典
在 Python 中,如果想将字典的内容输出也比较简单,可以直接使用print()函数。例如,下面的代码:
print(dictionary)但是,在使用字典时,很少直接输出它的内容。一般需要根据指定的键得到相应的结果。在 Python 中,访问字典的元素可以通过小标的方式实现,与列表和元组不同,这里的下标不是索引号,而是键。另外,Python 中推荐的方法是使用字典对象的get()方法获取指定键的值,其语法格式如下:
dictionary.get(key,[default])其中,dictionary为字典对象,即要从中获取值的字典;key为指定的键;default为可选项,用于指定当指定的“键”不存在时,返回一个默认值,如果省略,则返回 None。
遍历字典
字典是以键—值对的形式存储数据的,所以就可能需要获取这些键—值对。Python 提供了遍历字典的方法,通过遍历可以获取字典中的全部键——值对。
使用字典对象的items()方法可以获取字典的键—值对列表,其语法格式如下:
dictionary.items()其中,dictionary为字典对象,返回值为可遍历的键—值对的元组列表。要想获取具体的键——值对,可以通过for循环遍历该元组列表。
说明:在 Python中,字典对象还提供了
values()和keys()方法,用于返回字典的“值”和“键”列表,它们的使用方法同items()(方法类似,也需要通过for循环遍历该字典列表,获取对应的值和键。
添加、修改和删除字典元素
由于字典是可变序列,所以可以随时在其中添加键—值对,这和列表类似。向字典中添加元素的语法格式如下:
dictionary[key] = value参数说明如下:
- dictionary:表示字典名称。
- key:表示要添加元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组。
- value:表示元素的值,可以是任何数据类型,不是必须唯一。
列表、元组和字典的区别
| 数据结构 | 是否可变 | 是否有序 | 定义符号 |
|---|---|---|---|
| 列表 | 可变 | 有序 | [] |
| 元组 | 不可变 | 有序 | () |
| 字典 | 可变 | 无序 | {key:value} |
