列表

列表是任意对象的有序、可变序列,通常用于存放同类项目的集合。列表实现了前面给出的所有通用和可变序列的操作。

创建列表#

可通过方括号来构建列表,方括号内的各个对象使用逗号 , 分割。如下所示:

    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_objectiterable 是要进行排序的对象。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)
概述元组