机器学习:基于OpenCV和Python的智能图像处理
上QQ阅读APP看书,第一时间看更新

2.5 列表与元组

在Python中,每个元素按照位置编号来顺序存取的数据类型称为序列类型,这就类似于C语言中的数组。不同的是,在Python中,列表和元组这两种序列可以存储不同类型的元素。

对于列表和元组来说,它们的大部分操作是相同的,不同的是列表的值是可以改变的,而元组的值是不可变的。在Python中,这两种序列在处理数据时各有优缺点。元组适用于不希望数据被修改的情况,而列表则适用于希望数据被修改的情况。

2.5.1 创建

本小节主要介绍列表与元组的创建。

1.列表的创建

列表的创建采用在方括号中用逗号分隔的定义方式,基本形式如下:

    [x1, [x2, ..., xn]]

列表也可以通过list对象来创建,基本形式如下:

    list()                       #创建一个空列表
    list(iterable)               #创建一个空列表,iterable为枚举对象的元素

列表创建示例如下:

    >>>[]#创建一个空列表
    >>>[1, 2, 3]                 #创建一个元素为1,2,3的列表
    >>>list()                    #使用list创建一个空列表
    >>>list((1, 2, 3))           #使用list创建一个元素为1,2,3的列表
    >>>list("a, b, c")           #使用list创建一个元素为a, b, c的列表

2.元组的创建

元组的创建采用圆括号中逗号分隔的定义方式,其中,圆括号可以省略。基本形式如下:

    (x1, [x2, ..., xn])

或者为:

    x1, [x2, ..., xn]


注意 当元组中只有一个项目时,其后面的逗号不可以省略,否则,Python解释器会把(x1)当作x1。


元组也可以通过tuple对象来创建,基本形式如下:

    tuple()                      #创建一个空元组
    tuple (iterable)             #创建一个空元组,iterable为枚举对象的元素

元组创建示例如下:

    >>> [ ]                      #创建一个空元组
    >>>[1, 2, 3]                 #创建一个元素为1,2,3的元组
    >>>tuple ()                  #使用tuple创建一个空元组
    >>>tuple ((1, 2, 3))         #使用tuple创建一个元素为1,2,3的元组
    >>>tuple ("a, b, c")         #使用tuple创建一个元素为a, b, c的元组

2.5.2 查询

列表和元组都支持查询(访问)其中的元素。在Python中,序列的每一个元素被分配一个位置编号,称为索引(index)。第一个元素的索引是0,序列中的元素都可以通过索引进行访问。其一般格式为:

序列名[索引]

列表与元组的正向索引查询如下所示:

    >>>list_l = [1,2,3]
    >>>list_l[1]
    2
    >>>tuple_l = ((1,2,3))
    >>>tuple[0]
    1

另外,Python序列还支持反向索引(负数索引)。这种索引方式可以从最后一个元素开始计数,即倒数第一个元素的索引是-1。这种方法可以在不知道序列长度的情况下访问序列最后面的元素。

列表与元组的反向索引查询如下所示:

    >>>list_l = [1,2,3]
    >>>list_l[-1]
    3
    >>>tuple_l = ((1,2,3))
    >>>tuple[-2]
    2

2.5.3 修改

对于修改操作,由于元组的不可变性,元组的数据不可以被改变,除非将其改为列表类型。

对于列表来说,要修改其中某一个值,可以采用索引的方式,这种操作也叫作赋值。例如:

    >>>list_l = [1,2,3]
    >>>list_l[1] = 9
    >>>list_l
    [1,9,3]


注意 在对列表进行赋值操作时,不能为一个没有索引的元素赋值。


下面介绍两个Python自带的函数append和extend。append函数的作用是在列表末尾添加一个元素,例如:

    >>>list_l = [1,2,3]
    >>>list_l.append(4)
    >>>list_l
    [1,2,3,4]

在Python中,extend函数用于将一个列表添加到另一个列表的尾部,例如:

    >>>list_1 = [1,2,3]
    >>>list_l.extend('a, b, c')
    >>>list_l
    [1,2,3, a, b, c]

由于元组的不可变性,我们不能改变元组的元素,但是可以将元组转换为列表进行修改,例如:

    >>>tuple_l = [1,2,3]
    >>>list_l = list(tuple)         #元组转列表
    >>>list_l[1] = 8
    >>>tuple_1 = tuple(list_1)      #列表转元组
    >>>tuple_1
    (1,8,3)

列表作为一种可变对象,Python中提供了很多方法对其进行操作,如表2-2所示。

表2-2 列表对象的主要操作方法

class="thirdTitle" id="bw25">2.5.4 删除

元素的删除操作也只适用于列表,而不适用于元组,同样,将元组转换为列表就可以进行删除操作。

从列表中删除元素很容易,可以使用del、clear、remove等操作,如下所示。

    >>>x = [1,2,3, 'a']
    >>>del x[3]
    >>>x
    [1,2,3]

del不仅可以删除某个元素,还可以删除对象,如下所示。

    >>>x = [1,2,3, 'a']
    >>>del x
    >>>x            #错误语句

上面的程序中因为x对象被删除,所以会提示:

    NameError:name 'x' is not defined

clear会删除列表中所有的元素。

    >>>x = [1,2,3, 'a']
    >>>x.clear()
    >>>x
    []

remove (x)操作会将列表中出现的第一个x删除。

    >>>x = [1,2,3, 'a']
    >>>x.remove(2)
    >>>x
    [1,3, 'a']

列表的基本操作还有很多,在此不再一一列举,感兴趣的读者可以上网查阅。