第10课列表

对于歌曲列表大家一定很熟悉,在列表中记录着要播放的歌曲名称,如下图:

python中的列表和歌曲列表类似,也是由一系列安特定顺序排序的元素组成的。它是python中内置的可变序列。在形式上,列表的所有元素都放在一个中括号“[]”中,两个相邻元素间使用逗号“,”分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入到列表中,并且同一个列表中,元素的类型可以不同,因为它们之间没有任何关系。由此可见,python中的列表是非常灵活的,这一点与其它语言是不同的。

列表的创建和删除

在python中提供了多种创建列表的方法,下面分别介绍。

1.使用赋值运算符之间创建列表

同其它类型的python变量一样,创建列表时,也可以使用赋值运算符“=”直接将一个列表赋值给变量,具体语法如下:

  • listname = [element 1,element 2,element 3,…….,element n]

其中,listname表示列表的名称,可以是任何符号python命名规则的标识符;
“element 1、element 2、element 3、element n”表示列表中的元素,个数没有限制,并且只要是python支持的数据类型就可以。例如,下面的定义都是合法的:

说明:在使用列表是,虽然可以将不同类型的数据放入到同一个列表中,但是通常情况下,我们不会这样做,而是在一个列表中只放入一种类型的数据,这样可以提高程序的可读性。

2.创建空列表

在python中,也可以创建空列表,例如,要创建一个名称为src的空列表,可以使用下面的代码:

  • src = []

3.创建数值列表

在python中,数值列表很常用。例如,在考试系统中记录学生的成绩,或者在游戏中记录每个角色的位置,各个玩家的得分情况等都可以应用数值列表。在python中,可以使用list()函数直接将range()函数循环出来的结果转换为列表,list()函数的基本语法如下:

  • list(data)

其中,data表示可以转换为列表的数据,其类型可以是range对象、字符串、元组或者其他可迭代类型的数据。

例如创建一个10-20之间(不包括20)所有偶数的列表,可以使用下面的代码:

  • list(range(10,20,2))

在IDLE中运行后,结果如下:

说明:使用list()函数时,不仅能通过range对象创建列表,还可以通过其他对象创建列表。

4.删除列表

对于已经创建的列表,不在使用时,可以使用del语句将其删除。语法如下:

  • del listname

其中listname为要删除列表的名称。

说明:del语句在实际开发时,并不常用。因为python自带的垃圾回收机制会自带销毁不用的列表,所以即使我们不手动将其删除,python也会自动将其回收。

例如,定义一个名称为scr的列表,然后在应用del语句将其删除,代码如下:

常见错误:在删除列表前,一定要保证输入的列表名称是已经存在的,否则将会出现如下图错误:

访问列表元素

在python中,如果想将列表的内容输出也比较简单,可以直接使用print()函数。例如,想要打印下面列表中的src列表,代码如下:

从上面的执行结果中可以看出,在输出列表时,是包括左右两侧的中括号的。如果不想要输出全部的元素,也可以通过列表的索引获取指定的元素。例如,要获取列表src中索引为2的元素,代码如下:

从上面的执行结果中可以看出,在输出单个列表元素时,不包括中括号,如果是字符串,不包括左右的引号。

遍历列表

遍历列表中的所有元素是常用的一种操作,在遍历的过程中可以完成查询、处理等功能。在生活中,如果想要去商场买一件衣服,就需要在商场中逛一遍,看是否有想要的衣服,逛商场的过程就相当于列表的遍历操作。在python中遍历列表的方法有多种,下面介绍两种常用的方法。

1.直接使用for循环实现

直接使用for循环遍历列表,只能输出元素的值。它的语法如下:

  • for item in listname:
  • #输出item

其中,item用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可;listname为列表名称。

例如,我们定义一个src列表,并输出各个厂商,代码如下:

输出结果如下:

2.使用for循环和enumerate()函数实现

使用for循环和enumerate()函数可以实现同时输出索引值和元素内容的功能。语法如下:

  • for index,item in enumerate(listname):
  • #输出index和item

参数说明:

  • index:用于保存元素的索引。
  • item 用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可。
  • listname 为列表名称

在继续拿我们上面的代码来做修改,通过for循环和enumerate()函数遍历该列表,并输出索引和名称,代码如下:

输出结果如下:

添加、修改和删除列表元素

添加、修改和删除元素也称为更新列表。在实际开发时,经常需要对列表进行更新。下面我们就分别介绍如何实现列表元素的添加、修改和删除。

1.添加元素

在前面介绍了可以通过“+”号将两个序列连接,通过该方法也可以实现为列表添加元素。但是这种方法的执行速度要比直接使用对象的append()方法慢,所以建议在实现添加元素时,使用列表对象的append()方法实现。列表对象append()方法用于在列表的末尾追加元素,语法如下:

  • listname.append(obj)

其中,listname为要添加元素的列表名称;obj为要添加到列表末尾的对象。

例如定义一个包括4个元素的列表,然后应用append()方法向该列表的末尾在添加一个元素,代码如下:

上面的代码在IDLE中的shell窗口一行行执行的结果如下:

在多学两招:列表对象除了提供append()方法向列表中添加元素,还提供了insert()方法向列表中添加元素。该方法用于向列表的指定位置插入元素。但是由于该方法的执行效率没有append()方法高,所以不推荐这种方法。

上面介绍的时向列表中添加一个元素,如果想要将一个列表中的全部元素添加到另一个列表中,可以使用列表对象的extend()方法实现。extend()方法的具体语法如下:

  • listname.extend(seq)

其中,listname为原列表,seq为要添加的列表,语句执行后,seq的内容将追加到listname的后面。下面看一个实列:

执行结果如下:

2.修改元素

修改列表中的元素只需要通过索引获取该元素,然后再为其重新赋值即可。例如定义一个保存3个元素的列表,然后修改索引值为2的元素,代码如下:

3.删除元素

删除元素注意有两种情况,一种是根据索引删除,另一种是根据元素值进行删除。

  • 根据索引删除

删除列表中的指定元素和删除列表类似,也可以使用del语句实现。所不同的是在指定列表名称时,换为列表元素。例如定义一个保存3个元素的列表,删除最后一个元素,代码如下:

  • 根据元素值删除

如果想要删除一个不确定其位置的元素(即根据元素值删除),可以使用列表对象的remove()方法实现。例如,要删除类别内容为“支付宝”的元素,代码如下:

  • src =[” 支付宝”,”网易”,”腾讯”]
  • src.remove(“支付宝”)

使用列表对象的remove()方法删除元素时,如果指定的元素不存在,将出现下图的错误:

所以在使用remove()方法删除元素前,最好先判断该元素是否存在,改进后的代码如下:

说明:列表对象的count()方法用于判断指定元素出现的次数,返回结果为0时,表示不存在该元素。

执行上面的代码后,结果如下:

对列表进行统计计算

python的列表提供了内置的一些函数来实现统计、计算方法的功能。下面介绍常用的功能。

1.获取指定元素出现的次数

使用列表对象的count()方法可以获取指定元素在列表中的出现次数,语法如下:

  • listname.count(obj)

参数说明:

  • listname 表示列表的名称
  • obj 表示要判断是否存在的对象,这里只能进行精确匹配,即不能是元素值的一部分。
  • 返回值 元素在列表中出现的次数

例如,创建一个列表,内容随意,然后应用列表对象的count()方法判断元素“z支付宝”出现的次数,代码如下:

上面的代码运行后将显示2,表示在列表src中“支付宝”出现了两次。

2.获取指定元素首次出现的下标

使用列表对象的index()方法可以获取指定元素在列表中首次出现的位置(即索引)。语法格式如下:

  • listname.index(obj)

参数说明:

  • listname 表示列表的名称
  • obj 表示要查找的对象,这里只能进行精确匹配。如果指定的对象不存在时,则抛出异常。
  • 返回值:首次出现的索引值

例如,创建一个列表,内容随意,然后应用列表对象的index()方法判断元素“支付宝”首次出现的位置。代码如下:

上面代码运行后,将显示3,表示“支付宝”在列表src中首次出现的索引位置时3。

3.统计数值列表的元素和

在python中,提供了sum()函数用于统计数值列表中各元素的和。语法如下:

  • sum(itreable[,start])

参数说明:

  • iterable:表示要统计的列表。
  • start:表示统计结果是从哪个数开始(即将统计结果加上start所指定的数),是可选参数,如果没有指定,默认值为0。

例如,我们定义一个考试成绩列表,然后应用sum()函数统计列表中元素的和,即统计总成绩,然后输出,代码如下:

上面的代码执行后,将显示下面的结果:

对列表进行排序

在实际开发时,经常需要对列表进行排序。python中提供了两种常用的对列表进行排序的方法:使用列表对象的sort()方法和使用内置的sorted()函数。

1.使用列表对象的sort()方法实现

列表对象提供了sort()方法用于对原列表中的元素进行排序。排序后原列表中的元素顺序将发生改变,列表对象的sort()方法的语法如下:

  • listname.sort(key=None,reeverse=False)

参数说明:

  • listname:表示要进行排序的列表。
  • key:表示指定一个从每个列表元素中提取一个用于比较的键(例如,设置“key=str.lower”表示在排序时不区分字母大小写)。
  • reverse:可选参数,如果将其值指定为True,则表示降序排列,如果为False,则表示升序排列。默认为升序排列。

例如,我们接着上面的成绩列表做出修改,然后应用sort()方法对其进行排序,代码如下:

执行上面的代码,结果如下:

使用sort()方法进行数值列表的排序比较简单,但是使用sort()方法对字符串列表进行排序时,采用的规则是先对大写字母进行排序,然后再对小写字母排序。如果想要对字符串列表进行排序(不区分大小写时),需要指定其key参数。例如定义一个保存英文字符串的列表,然后应用sort()方法对其进行升序排列,代码如下:

运行上面的代码,结果如下:

说明:采用sort()方法对列表进行排序时,对于中文支持不好。排序的结果与我们常用的音序排序法或者笔画排序法都不一致。如果需要实现对中文内容的列表排序,还需要从新编写相应的方法进行处理,不能直接使用sort()方法。

2.使用内置的sorted()函数实现

在python中,提供了一个内置的sorted()函数,用于对列表进行排序。使用该函数进行排序后,原列表的元素顺序不变。sorted()函数的语法如下:

  • sorted(iterable,key=None,reverse=False)

参数说明:

  • iterable:表示要进行排序的列表名称。
  • key:表示指定一个从每个列表元素中提取一个用于比较的键(例如。设置“key=str.lower”表示在排序时不区分字母大小写)。
  • reverse:可选参数,如果将其值指定为True,则表示降序排序;如果为False,则表示升序排列。默认为升序排列。

例如,定义一个成绩列表,然后应用sorted()函数对其进行排序,代码如下:

执行上面的代码,结果如下:

说明:列表对象的sort()方法和内置sorted()函数的作用基本相同,所不同的就是使用sort()方法时,会改变原列表的元素排列顺序,而使用sorted()函数时,会建立一个原列表的副本,该副本为排序后的列表。

列表推导式

使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。列表推导式通常有以下几种常用的语法格式。

1.生成指定范围的数值列表,语法格式如下:

  • list = [Expression for var in range]

参数说明:

  • list:表示生成的列表名称。
  • expression:表达式,用于计算新列表的元素。
  • var:循环变量。
  • range:采用range()函数生成的range对象。

例如,要生成一个包括10个随机数的列表,要求数的范围在10-100(包括)之间,代码如下:

执行结果如下:

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:条件表达式,用于指定筛选条件。

例如,定义一个记录商品价格的列表,然后应用列表推导式生成一个商品价格高于5000的列表,代码如下:

执行结果如下: