序列

索引(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循环中
表 1 Python 提供的内置函数及其作用

列表(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:
   # 输出 item

2 . 使用 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}
表 2 列表、元组和字典的区别