大家在前面的学习中可以发现到处都是列表,仿佛Python语法都是围绕列表展开的,本节会详细的去介绍列表,列表被大多数Python使用者认为是Python中最核心的部分,因为Python的列表十分强大,我们很多操作都是基于列表来进行的。

首先我们还是先介绍一下列表,列表是一个可以包含多种数据类型的对象,列表中的内容是可以改变的,它属于一种动态数据结构,我们可以对它进行添加或删除操作,因此在列表操作的时候离不开索引的使用。

1. 列表的定义

其实大家在前面可以多次的看到我们对列表的定义,在Python中我们不可以简单的只定义一个变量名,例如我们接下来要使用一个列表,我们不可以先定义一个my_list,之后再进行赋值什么的,因此我们定义列表的方式为:

my_liss = []#定义空列表
my_list = [1,2,3,4,5,6]#定义已有值的列表
my_lizz = ['a','b','c','d']

我们可以把列表当作一种容器,我们用它来存放东西,可以在其中存放相同类型的数据,也可以存放不同类型的数据,但是为了提高程序的可读性,建议在一个列表中存放同一种数据类型。

2. 数值列表的创建(list()函数)

有的时候我们需要创建拥有一定数值的列表,而我们又不想手动输入,因此我们可以用list()函数嵌套range()函数直接进行创建。

list()函数不止可以进行强制类型转换,把字符串或元组转换为列表,还可以在定义的时候就使用列表方式。

举个例子:

我们想要创建一个列表,列表中包含1~10的数字,那么我们可以采用如下方式:

my_list = list(range(1,11))
print(my_list)

输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

这样就可以很快捷的创建一个我们想要得到的列表。

3. 删除列表

列表的删除采用del语句来操作。格式为:

del my_list

看下面实例:

my_list = []
del my_list#删除这个已被创建的列表
print(my_list)#输出一下试试

输出结果为:

File "D:/python/p/test.py", line 3, in <module>
    print(my_list)
NameError: name 'my_list' is not defined

通过报错提示我们可以知道我们创建的列表已经被删除了。

4. 列表的复制

我们有时候会需要做一个列表的副本,这时候我们就需要复制列表中的元素,我们可以先思考一下,如果先定义一个列表,然后再定义一个列表,让第二个列表等于第一个列表,我们修改了第一个列表中的值之后,第二个列表中的值会变吗?

看下面代码:

first_list = [1, 2, 3, 4]  # 先定义一个列表
second_list = first_list  # 复制这个列表
print('修改前(第一个列表和第二个列表):', first_list, ',', second_list)  # 输出看一下
first_list[0] = 10
print('修改后(第一个列表和第二个列表):', first_list, ',', second_list)  # 再输出看一下
print(id(first_list), id(second_list))  # 通过访问id可以发现此时两个列表地址是相同的

输出结果为:

修改前(第一个列表和第二个列表): [1, 2, 3, 4] , [1, 2, 3, 4]
修改后(第一个列表和第二个列表): [10, 2, 3, 4] , [10, 2, 3, 4]
2623951954504 2623951954504

可以发现复制的第二个列表在第一个列表中的元素值被修改之后也跟随着修改,说明了他们是使用的同一列表。

看下示意图:

 python list1

也就是说着两个变量使用的是内存中的同一列表,无论修改哪个列表中的元素,对应的都是同一列表。

如果想要使用相同内容的列表但各自独立的话可以采用下面的方法:

first_list = [1,2,3,4]#先定义一个列表
second_list = [] + first_list#使用连接符
print(id(first_list),id(second_list))#通过访问id可以发现此时两个列表是相互独立的

输出结果为:

1899857928776 1900113448584

5. 总结

关于列表下面都是关于它进行讲解,可能对比于其他教程本教程显得过于啰嗦,但是大家一定要明白Python的数据结构中最核心的就是列表,把列表的各方各面学习透彻对之后不管是竞赛也好,项目开发也好,都有很大的帮助,所以列表的学习十分重要。


点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)