列表是任意对象的有序、可变序列,通常用于存放同类项目的集合。列表实现了前面给出的所有通用和可变序列的操作。
创建列表#
可通过方括号来构建列表,方括号内的各个对象使用逗号 , 分割。如下所示:
pets = ['dog', 'cat', 'rabbit', 'fish']
squares = [1, 4, 9, 16, 25]
print(pets, type(pets)) # ['dog', 'cat', 'rabbit', 'fish'] <class 'list'>
print(squares, type(squares)) # [1, 4, 9, 16, 25] <class 'list'>
列表中也可以包含混合类型元素:
mixed_list = ['dog', 4, False, ['a', 'c']]
不包含任何元素的列表称为空列表,用 [] 表示。下面创建一个名称为 empty_list 的空列表:
empty_list = []
也可以使用内置的 list() 函数(这是列表类型的构造器)从一个可迭代对象创建列表:
list1 = list( (1, 2, 3) ) # [1, 2, 3]
list2 = list( [1, 2, 3] ) # [1, 2, 3]
list3 = list('abcd') # ['a', 'b', 'c', 'd']
list4 = list(range(3, 13, 3)) # [3, 6, 9, 12]
list5 = list( {'mammal', 'bird', 'reptile', 'fish'} ) # ['mammal', 'fish', 'bird', 'reptile']
list6 = list() # 空列表 []
还可以使用形如 [x for x in iterable] 的列表推导式创建列表:
list1 = [x for x in range(5)] # [0, 1, 2, 3, 4]
list2 = [x ** 2 for x in range(5)] # [0, 1, 4, 9, 16]
list3 = [x ** 2 for x in range(5) if x % 2 == 0] # [0, 4, 16]
上例中,list3 的创建相当于如下代码的简写形式:
list3 = []
for x in range(5):
if x % 2 == 0:
list3.append(x ** 2)
访问列表#
可以使用与前面所述序列的通用操作访问列表元素,或对列表进行切分。如下所示:
pets = ['dog', 'cat', 'rabbit', 'fish']
print(pets[0]) # dog
print(pets[3]) # fish
print(pets[-1]) # fish
print(pets[-3]) # cat
print(pets[1:3]) # ['cat', 'rabbit']
print(pets[:3]) # ['dog', 'cat', 'rabbit']
print(pets[3:1:-1]) # ['fish', 'rabbit']
print(pets[:1:-1]) # ['fish', 'rabbit']
print(pets[:-3:-1]) # ['fish', 'rabbit']
print(pets[::-2]) # ['fish', 'cat']
追加、插入和删除列表元素#
可以使用列表的 append() 方法将一个项目追加到列表的末尾,也可以使用 insert() 方法在特定的索引处插入项目,使用 pop() 方法移出(删除)列表中最后一个元素,使用 remove() 方法移除特定的元素值,使用 del 关键字删除特定索引对应的元素,甚至删除整个列表。
pets = ['dog', 'cat', 'rabbit', 'fish']
pets.append('chick') # 向列表的最后追加元素
print(pets) # ['dog', 'cat', 'rabbit', 'fish', 'chick']
pets.insert(0, 'snake') # 在索引 0 位置处插入 'snake',其他元素后移
print(pets) # ['snake', 'dog', 'cat', 'rabbit', 'fish', 'chick']
pets.pop() # 移出列表末尾的元素
print(pets) # ['snake', 'dog', 'cat', 'rabbit', 'fish']
pets.remove('rabbit') # 移除值为 'rabbit' 的元素,所要移除的值必须在列表中
print(pets) # ['snake', 'dog', 'cat', 'fish']
del pets[0] # 删除列表中索引为 0 的元素
print(pets) # ['dog', 'cat', 'fish']
del pets # 删除整个列表,pets 变量将不复存在
更改列表元素值#
要更改某一元素值,需要通过索引访问列表中的元素,然后为其赋新值;也可以为列表的切片赋新值。如下所示:
pets = ['dog', 'cat', 'rabbit', 'fish']
pets[-1] = 'chick'
print(pets) # ['dog', 'cat', 'rabbit', 'chick']
pets[2:] = ['tortoise', 'snake', 'spider']
print(pets) # ['dog', 'cat', 'tortoise', 'snake', 'spider']
遍历列表#
列表属于可遍历类型,可以使用 for 循环语句逐个访问列表元素:
pets = ['dog', 'cat', 'rabbit', 'fish']
for pet in pets:
print(pet)
# dog
# cat
# rabbit
# fish
对列表进行排序#
在程序开发时,经常要对列表进行排序。Python 提供了两种常用的对列表进行排序的方法:使用列表的 sort() 方法,或使用内置的 sorted() 函数。
sort() 方法和 sorted() 函数的语法格式分别如下:
list_object.sort(key=None, reverse=False)
sorted(iterable, key=None, reverse=False)
其中 list_object 和 iterable 是要进行排序的对象。key 形参用于指定排序规则,默认为 None,表示直接按元素值进行排序;该参数的值为一个函数,此函数接受一个参数并返回一个用于排序的键,如设置为 key=str.lower 表示在排序时不区分字母大小写。reverse 形参为可选参数,默认为 False,表示按升序排序;如果设为 True,表示按降序排序。
sort() 方法使用示例:
pets = ['dog', 'cat', 'Rabbit', 'fish']
pets.sort()
print(pets) # ['Rabbit', 'cat', 'dog', 'fish']
pets = ['dog', 'cat', 'Rabbit', 'fish']
pets.sort(key=str.lower)
print(pets) # ['cat', 'dog', 'fish', 'Rabbit']
pets = ['dog', 'cat', 'Rabbit', 'fish']
pets.sort(key=str.lower, reverse=True)
print(pets) # ['Rabbit', 'fish', 'dog', 'cat']
sorted() 函数使用示例:
pets = ['dog', 'cat', 'Rabbit', 'fish']
pets_sorted = sorted(pets)
print(pets) # ['dog', 'cat', 'Rabbit', 'fish']
print(pets_sorted) # ['Rabbit', 'cat', 'dog', 'fish']
pets = ['dog', 'cat', 'Rabbit', 'fish']
pets_sorted = sorted(pets, key=str.lower, reverse=True)
print(pets_sorted) # ['Rabbit', 'fish', 'dog', 'cat']
关于排序的详细操作,请参见排序指南。
其他操作#
可以使用 in 运算符检查某一元素是否存在:
pets = ['dog', 'cat', 'rabbit', 'fish']
print('cat' in pets) # True
count() 方法可获取指定元素出现的次数:
pets = ['dog', 'cat', 'rabbit', 'fish', 'cat']
print(pets.count('fish')) # 1
print(pets.count('cat')) # 2
可以使用 extend() 方法将一个列表的所有元素添加到另外一个列表末尾:
nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
nums1.extend(nums2)
print(nums1) # [1, 2, 3, 4, 5, 6]
可以使用 reverse() 方法将一个列表中的元素逆序:
nums1 = [1, 2, 3]
nums1.reverse()
print(nums1) # [3, 2, 1]
二维列表#
当列表的元素也是列表时,相当于一个二维列表。如下代码创建了一个表示力学中应力张量(三维实对称二阶张量)的变量,并通过嵌套的 for 循环语句逐次访问并打印该张量的元素,最后计算该张量的对角元素之和(张量的第一不变量):
sigma = [[26.7, 25.6, 10.8],
[25.6, 30.1, 24.9],
[10.8, 24.9, 15.4]]
for row in sigma:
for element in row:
print(element, end='\t')
print()
i1 = sigma[0][0] + sigma[1][1] + sigma[2][2]
print(i1)