Python的数据类型之一__列表

127 阅读7分钟

列表的定义

列表由一系列按特定顺序排列的元素组成。列表中的元素可以是任意数据类型,比如数字、字符串、元组、列表、字典、集合等,其中的元素之间可以没有任何关系。可以对列表中的元素进行增删改查等多种操作。在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。

例如:我们来创建一个包含不同数据类型的列表,并对列表中的元素进行操作

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]

image-20231103135521132

如图所示,我们就创建了包含int float str bool tuple list set dict等数据类型的列表,在对列表操作之前,先讲下索引是从0开始而不是从1开始的,在大多数编程语言中都是如此,这与列表操作的底层实现相关,比如索引为2的元素值是'love'而不是3.5。

对列表的操作

访问列表元素

列表是有序集合,访问列表元素时需要指出列表的名称,以及该元素的位置或索引,并将其放在方括号内。比如,我们要访问并打印上述列表中索引为5的元素就可以这样写:

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
print(lists[5])

运行文件,输出 [7,8,9]

能访问列表中的元素,那么我们就可以将访问到的元素拼接到其他地方,比如储存到一个新的变量中。例如,我们要打印一条消息描述一个人的信息,姓名为meimei,年龄为18,我们可以这样写:

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
message = "Her name is "+lists[7]['name']+" and age is "+lists[7]['age']+"!"
print(message)

运行文件,就会输出如下图所示结果:

image-20231103143928998

添加元素到列表中

添加元素到列表中有两种情况,一种是将元素附加到列表的末尾,另一种是将元素插入到列表的指定位置处。

例如,我们要在上述列表中添加一个新的元素'spring',用方法append()

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
lists.append('spring')
print(lists)

列表就变成如下所示,这种方法只是在末尾新增加了一个新的元素,不会影响到列表中的其他元素。

[2, 3.5, 'love', False, (3, 4, 5), [7, 8, 9], {5, 6, 7}, {'name': 'meimei', 'age': '18'}, 'spring']

要在列表中添加一个新的元素到指定位置,使用方法insert(),需要指定新元素的索引和值。例如我们要到上述列表中添加元素'spring'到索引为3处

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
lists.insert(3,'spring')
print(lists)

列表就变成如下所示,这种方法在索引3处添加空间,并将值'spring'存储到这个地方。这种操作会将列表中既有的每个元素都右移一个位置。

[2, 3.5, 'love', 'spring', False, (3, 4, 5), [7, 8, 9], {5, 6, 7}, {'name': 'meimei', 'age': '18'}]

修改列表中的元素

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,先指定列表名和要修改的元素的索引,再指定该元素的新值。

比如,我们要将上述列表索引3处的False值修改为True,可以这样写代码

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
lists[3] = True
print(lists)

列表就变成了如下所示

[2, 3.5, 'love', True, (3, 4, 5), [7, 8, 9], {5, 6, 7}, {'name': 'meimei', 'age': '18'}]

删除列表中的元素

删除列表中的元素有如下几种情况:

  • 知道要删除的元素在列表中的位置,使用del方法,删除之后就没办法再去访问这个元素。例如要删除上述列表中索引为3的元素False
 lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
 del lists[3]
 print(lists)

列表就变成了

[2,3.5,'love',(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
  • 有时候我们需要使用从列表中删除的值,可以使用pop()方法,默认删除列表中末尾值,如果要删除列表中指定位置的值,加上位置索引即可。例如,我们来删除上述列表中的末尾值,并把它赋值给新的变量,打印原列表和新列表:
lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
new_lists = lists.pop()
print(lists)
print(new_lists)

运行文件,结果为:

[2, 3.5, 'love', False, (3, 4, 5), [7, 8, 9], {5, 6, 7}]     #原列表
{'name': 'meimei', 'age': '18'}     #新列表

我们来删除上述列表中索引为3的值,删除时加上位置索引:

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
new_lists = lists.pop(3)
print(lists)
print(new_lists)

运行文件,结果为:

[2, 3.5, 'love', False, (3, 4, 5), [7, 8, 9], {5, 6, 7},{'name': 'meimei', 'age': '18'}]     #原列表
False   

观察上述结果,可以理解为pop()方法是对列表中的元素分离。

如果你不确定该使用del()方法还是pop()方法,简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del()方法;如果你要在删除元素后还能继续使用它,就使用方法pop()。

  • 如果你知道要删除的元素的值,而不知道其索引,则可以使用方法remove()

例如我们要删除上述列表中的False值,但是不知道它的位置索引

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
lists.remove(False)
print(lists)

运行文件,结果为:

 [2,3.5,'love',(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]

组织列表

对列表进行永久性排序

要对列表进行排序,可以使用方法sort(),但是有些数据类型不支持排序,比如上述列表中有各种类型数据,我们对它进行排序

lists = [2,3.5,'love',False,(3,4,5),[7,8,9],{5,6,7},{'name':'meimei','age':'18'}]
lists.sort()
print(lists)

运行文件,结果报错:

lists.sort() TypeError: '<' not supported between instances of 'str' and 'float'

我们重新创建一个汽车列表,并要让其中的汽车按字母顺序排列。为简化这项任务,我们假设该列表中的所有值都是小写的,然后对该列表进行排序:

cars = ['bmw','audi','toyota','subaru']
cars.sort()
print(cars)

运行文件,结果为:

['audi', 'bmw', 'subaru', 'toyota']

现在,汽车是按字母顺序排列的,再也无法恢复到原来的排列顺序。

如果要按与字母顺序相反的顺序排列列表元素,就向sort()方法传递参数reverse=True,如下所示:

cars = ['bmw','audi','toyota','subaru']
cars.sort(reverse=True)
print(cars)

运行文件,结果为:

['toyota','subaru','bmw','audi']

对列表进行临时排序

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted()。函数sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。下面尝试对汽车列表调用这个函数,如图所示:

image-20231202110941652

我们首先按原始顺序打印列表,见41行,再按字母顺序显示该列表,见45行。以特定顺序显示列表后,我们进行核实,确认列表元素的排列顺序与以前相同,见48行。执行结果如下图所示:

image-20231202114403055

调用函数sorted()后,列表元素的排列顺序并没有变。如果你要按与字母顺序相反的顺序显示列表,向函数sorted()传递参数reverse=True。

倒着打印列表

要反转列表元素的排列顺序,使用方法reverse()。但reverse()不是指按与字母顺序相反的顺序排列列表元素,而是反转列表元素的排列顺序。方法reverse()会永久性地修改列表元素的排列顺序,可随时恢复到原来的排列顺序,只需对列表再次调用reverse()即可。如下图所示:

image-20231202115400450

确定列表的长度

使用函数len()可快速获悉列表的长度。如下图所示,包含4个元素,因此其长度为4:

image-20231202120016613

在本节中你学习了:列表是什么以及如何使用其中的元素;如何定义列表以及如何增删元素;如何对列表进行永久性排序,以及如何为展示列表而进行临时排序;如何确定列表的长度等。