Python list列表详解

在实际开发中,经常需要将一些(不只一个)数据暂储起来,以便将来使用。说到这里,一些读者可能知道或听说过数组,它就可以把多个数据挨个存储到一起,通过数组下标可以访问数组中的各个元素。但使用数组存储数据有一个弊端,就是所存储的数据必须类型一致。

需要明确的是,Python 中没有数组,但是加入了更加强大的列表。如果把数组看做是一个集装箱,那么 Python 的列表就是一个工厂的仓库。

从形式上看,列表会将所有元素都放在一对中括号 [] 中,相邻元素之间用逗号分隔,如下所示:

[element1,element2,element3,...,elementn]

格式中,element1~elementn 表示列表中的元素,个数没有限制,只要是 Python 支持的数据类型就可以。

从内容上看,列表可以存储整数、实数、字符串、列表、元组等任何类型的数据,并且和数组不同的是,在同一个列表中元素的类型也可以不同。比如说:

["c.biancheng.net" , 1 , [2,3,4] , 3.0]

可以看到,列表中同时包含字符串、整数、列表、浮点数这些数据类型。

注意,在使用列表时,虽然可以将不同类型的数据放入到同一个列表中,但通常情况下不这么做,同一列表中只放入同一类型的数据,这样可以提高程序的可读性。


另外,在其它 Python 教程中,经常用 list 代指列表,这是因为列表的数据类型就是 list,通过 type() 函数就可以知道,例如:

>>> type(["c.biancheng.net" , 1 , [2,3,4] , 3.0])
<class 'list'>

可以看到,它的数据类型为 list,就表示它是一个列表。

Python创建列表

在 Python 中,创建列表的方法可分为 2 种,下面分别进行介绍。

使用 = 运算符直接创建列表

和其他类型的 Python 变量一样,创建列表时,也可以使用赋值运算符“=”直接将一个列表赋值给变量,其语法格式如下:

listname = [element1 , element2 , element3 , ... , elementn]

其中,listname 表示列表的名称,注意,在命名时既要符合 Python 命名规范,也要尽量避开与 Python 的内置函数重名。

例如,下面定义的列表都是合法的:
num = [1,2,3,4,5,6,7]
name = ["C语言中文网","http://c.biancheng.net"]
program = ["C语言","Python","Java"]

另外,使用此方式创建列表时,列表中元素可以有多个,也可以一个都没有,例如:

emptylist = []

这表明,emptylist 是一个空列表。

使用list()函数创建列表

除使用前面介绍的方括号语法创建列表之外,Python 还提供了一个内置的 list() 函数来创建列表,它可用于将元组、区间(range)等对象转换为列表,例如:
a_tuple = ('crazyit', 20, -1.2)
# 将元组转换成列表
a_list = list(a_tuple)
print(a_list)
输出结果为:

['crazyit', 20, -1.2]

此程序的功能是将一个元组 ('crazyit', 20, -1.2) 转换成列表。由于尚未学习元组,因此初学者只需要知道,用圆括号 () 括起来的多个数据,就是一个元组。

再举个例子:
# 使用range()函数创建区间(range)对象
a_range = range(1, 5)
# 将区间转换成列表
b_list = list(a_range)
print(b_list)
输出结果为:

[1, 2, 3, 4]

程序中,range(1,5) 函数的功能是生成从 1(包括 1)到 5(不包括 5)之间的整数,也就是 1、2、3、4。

有关 range() 函数的具体用法,后续章节会作详细介绍。

访问列表元素

在 Python 中,如果想将列表的内容输出也比较简单,直接使用 print() 函数即可。例如,前面已经创建了一个名为 name 的列表,输出此列表的执行代码如下:
name = ["C语言中文网","http://c.biancheng.net"]
print(name)
运行结果为:

['C语言中文网', 'http://c.biancheng.net']

可以看到,输出整个列表时,是包括左右两侧的中括号的。

如果不想要输出全部的元素,可以通过列表的索引获取指定的元素。例如,获取 name 列表中索引值为 1 的元素,可以使用如下代码:
name = ["C语言中文网","http://c.biancheng.net"]
print(name[1])
运行结果为:

http://c.biancheng.net

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

除了一次性访问列表中的单个元素外,列表还可以通过切片操作实现一次性访问多个元素。

有关切片操作的具体格式,可阅读《Python序列详解》一节,这里不再赘述。


例如:
num = [1,2,3,4,5,6,7]
print(num[2:4])
输出结果为:

[3, 4]

可以看到,通过切片操作,最终得到的是一个新的列表。

Python删除列表

对于已经创建的列表,如果不再使用,可以使用 del 语句将其删除。

实际开始时,del 语句不常用,因为 Python 自带的垃圾回收机制会自动销毁不用的列表,所以即使开发者不手动将其删除,Python 也会自动将其回收。


del 的语法格式为:

del listname

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

例如,删除前面创建的 name 列表,可以使用下面的代码:
name = name = ["C语言中文网","http://c.biancheng.net"]
print(name)
del name
print(name)
运行结果为:

['C语言中文网', 'http://c.biancheng.net']
Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\1.py", line 4, in <module>
    print(name)
NameError: name 'name' is not defined