Python中的列表(第7节)


4.7、Python中的列表(第7节)

1、列表的含义

在前面的教程中,我们简单介绍了数字和字符串两种类型,但是,有时候我们需要同时存储不同类型的数据,列表(list)就是Python中一种用于存储多个元素的有序容器,它允许包含不同类型的元素,如整数、浮点数、字符串等。‌列表是Python最重要也是最经常使用的数据类型,因此我们一定要清楚了解列表的含义以及用法。列表是一个有序且可更改的集合,用方括号[]表示,列表中的每个元素之间用逗号隔开(英文的逗号 )。在Python中,列表可以支持存放整数、小数、字符串、列表、元组、字典和集合等任何类型的数据,同一个列表中元素的类型也可以不同,但是通常情况下还是存放相同类型的数据。列表好比如是一个“大箱子”,在这个箱子中可以放入多个数字、字符串、变量等。“列表”与单个变量不同,单个变量只能放一个数据。例如:

动手练一练:

list0 = []   # 创建空列表
list1 = [1, 2, 3, 4]
list2 = ["1", "2", "3", "4"]
list3 = ["a", "b", 1, 2]
list4 = ["www.pyhint.com", 5, [1, 2, 3], 5.2]
print(list0)
print(list1)
print(list2)
print(list3)
print(list4)

执行以上代码,输出结果为:

[]
[1, 2, 3, 4]
['1', '2', '3', '4']
['a', 'b', 1, 2]
['www.pyhint.com', 5, [1, 2, 3], 5.2]

2、列表的索引

列表中可以存储多个有序的数据元素,列表也能像字符串一样,可以使用索引的方式来访问列表中的每一个元素,索引是用于标识列表中元素位置的数字。

列表的索引规则

正索引: 如果索引值是正数,则第一个元素的索引是0,第二个元素的索引是1,以此类推。例如,如果有一个列表list=[10, 20, 30, 40],那么list[0]是10,list[1]是20,以此类推。

负索引: 如果索引值是负数,则表示从列表末尾开始计数,那么就会从列表的右边开始往左计算位置,最后一个索引值是-1,最后第二个索引值是-2。例如,如果有一个列表list=[10, 20, 30, 40],list[-1]是40,list[-2]是30,以此类推。

列表的索引示例如下:

动手练一练:

list1 = [4, 5, 6, 'a', 'b', 'c']
print(list1[0])    # 输出 4
print(list1[2])    # 输出 6
print(list1[-1])    # 输出 c
print(list1[-2])    # 输出 b

执行以上代码,输出结果为:

4
6
c
b

如果尝试访问超出列表范围的索引,Python会抛出IndexError。例如:

动手练一练:

list1 = [4, 5, 6, 'a', 'b', 'c']
print(list1[8])    # 输出错误

执行以上代码,输出结果为:

IndexError: list index out of range

3、列表的切片

列表也能像字符串一样,可以通过切片操作来访问列表的一部分。列表中的切片操作同样使用冒号“:”来指定开始索引和结束索引,开始索引包含在切片结果中,而结束索引不包含在切片结果中。如果省略开始索引,Python就会从列表的开头开始切片;如果省略结束索引,Python就会默认切片到列表的末尾。如果同时省略开始索引和结束索引,表示切片从开头到最后一个元素。例如:

动手练一练:

list1 = [4, 5, 6, 'a', 'b', 'c']
print(list1[0:4])    # 输出 [4, 5, 6, 'a']
print(list1[:4])     # 输出 [4, 5, 6, 'a']
print(list1[-2:])    # 输出 ['b', 'c'],注意:-1表示倒数第一个'c',-2表示倒数第二个'b'
print(list1[:])      # 输出 [4, 5, 6, 'a', 'b', 'c']
print(list1[0:15])   # 输出 [4, 5, 6, 'a', 'b', 'c'],15超出范围,默认获取整个列表

执行以上代码,输出结果为:

[4, 5, 6, 'a']
[4, 5, 6, 'a']
['b', 'c']
[4, 5, 6, 'a', 'b', 'c']
[4, 5, 6, 'a', 'b', 'c']

上面的例子中,list1[0:15]结束索引的值为15,超出了索引的范围。列表切片中虽然超出范围不会报错,但默认获取整个列表。

4、列表的可变性

因为列表是可变的数据类型,所以列表具有改变元素的能力。当我们想要改变列表中某个元素的值时,可以通过列表索引的方式把这个元素找出来,然后重新给这个元素赋值。

动手练一练:

list1 = [4, 5, 6, 'a', 'b', 'c']
print(list1)
list1[3] = 1
print(list1)

执行以上代码,输出结果为:

[4, 5, 6, 'a', 'b', 'c']
[4, 5, 6, 1, 'b', 'c']

上面的例子中,list1[3]通过索引找到列表list1的第4个元素,这时第4个元素的值为字符串“a”,然后我们用赋值运算符“=”给第4个元素重新赋值为整型数字1。list1重新赋值后的第4个元素的值变为了1,所以列表list1再次打印的结果为[4, 5, 6, 1, 'b', 'c']。

列表还可以通过切片的方式同时修改多个元素的值。例如:

动手练一练:

a = [4, 5, 6, 'a', 'b', 'c']
print(a)
a[3:6] = [7, 8, 9]
print(a)

执行以上代码,输出结果为:

[4, 5, 6, 'a', 'b', 'c']
[4, 5, 6, 7, 8, 9]

这里需要注意的是,如果一个列表变量赋值给另一个变量,它只会拷贝变量的地址,而不会拷贝里面的内容。如果改变其中一个变量的内容,那么另一个变量也会跟着一起改变。例如:

动手练一练:

a = [4, 5, 6]
b = a
print(b[0]) # 输出4
b[0] = 3
print(a) # 输出[3, 5, 6]
print(b) # 输出[3, 5, 6]

执行以上代码,输出结果为:

4
[3, 5, 6]
[3, 5, 6]

但是我们可以使用列表“切片”来复制列表,因为所有的列表“切片”操作都会返回一个新的列表。

动手练一练:

a = [4, 5, 6]
b = a[:]
print(b) # 输出[4, 5, 6]
b[0] = 3
print(a) # 仍然输出[4, 5, 6]
print(b) # 输出[3, 5, 6]

执行以上代码,输出结果为:

[4, 5, 6]
[4, 5, 6]
[3, 5, 6]