-----------正文-----------

在前文已经提到,列表与元组最大的区别在于:元组是不可改变的,列表是可以改变的。元组支持的操作,列表基本上都支持;列表支持对元素的修改,而元组则不支持。从这个角度来看,可以认为列表是增强版的元组。 尽管大多数情况可以使用列表来代替元组,但如果程序不需要修改列表中的元素时,使用元组代替列表则会更安全。 1. 创建列表和元组

在前面已经介绍了使用方括号语法创建列表,其实Python 还提供了一个内置的list()函数来创建列表,list()函数可用于将元组、区间(range)等对象转换为列表。 示例代码:创建列表.py

a_tuple = ('极客起源', 40, 123.5, True)# 将元组转换成列表a_list = list(a_tuple)print(a_list)   # ['极客起源', 40, 123.5, True]# 使用range()函数创建区间(range)对象a_range = range(1, 20)print(a_range)      # range(1, 20)# 将区间转换成列表b_list = list(a_range)# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]print(b_list)# 创建区间时还可以指定步长c_list = list(range(4, 20, 2))print(c_list) # [4, 6, 8, 10, 12, 14, 16, 18]


上面程序中使用list()函数将1个元组转换为列表。然后又将一个区间(range) 对象转换为列表,该行代码转换的区间为range(1, 20),该区间的默认步长是1,该区间共包括1到19共19个值(注意:range()函数创建的区间是半闭半开的,所以不包括20)。因此程序输出b_ _list 时将看到如下结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]


最后将range(4, 20,2)转换为列表,该区间是从4到20 (不包括20)且步长为2的数值,因此程序输出c__list时将看到如下结果:

[4, 6, 8, 10, 12, 14, 16, 18]


与list()对应的是Python 也提供了一个tuple()函数,该函数可用于将列表、区间(range)等对象转换为元组。 示例代码:创建元组.py

a_list = ['公众号:极客起源', 120, False]# 将列表转换成元组a_tuple = tuple(a_list)print(a_tuple)      # ('公众号:极客起源', 120, False)# 使用range()函数创建区间(range)对象a_range = range(1, 10)print(a_range) # range(1, 10)# 将区间转换成元组b_tuple = tuple(a_range)print(b_tuple)      #(1, 2, 3, 4, 5, 6, 7, 8, 9)# 创建区间时还指定步长c_tuple = tuple(range(4, 20, 2))print(c_tuple)      # (1, 2, 3, 4, 5, 6, 7, 8, 9)


2. 向列表添加元素(append)

为列表添加元素可以使用列表的append()方法,该方法会把传入的参数值追加到列表的最后。append()方法既可接收单个值,也可接收元组、列表等,但该方法只是把元组、列表当成单个元素,这样就会形成在列表中嵌套列表、嵌套元组的情形。 示例代码:向列表添加元素.py

a_list = ['公众号:极客起源', 200, 12]# 追加元素a_list.append('输入160442获取《Python编程思想》')# ['公众号:极客起源', 200, 12, '输入160442获取《Python编程思想》']print(a_list)a_tuple = (44.3, 100)# 追加元组,元组被当成一个元素a_list.append(a_tuple)# ['公众号:极客起源', 200, 12, '输入160442获取《Python编程思想》', (44.3, 100)]print(a_list)# 追加列表,列表被当成一个元素a_list.append(['x', 'y'])# ['公众号:极客起源', 200, 12, '输入160442获取《Python编程思想》', (44.3, 100), ['x', 'y']]print(a_list)


从上面代码可以看出,为列表追加另一个列表时,Python 会将被追加的列表当成1个整体的元素,而不是追加目标列表中的元素。 3. 向列表添加元素(extend)

在上一节讲了append()方法,但这个方法只会将列表当成一个整体的元素添加,如果希望不将被追加的列表当成一个整体, 而只是追加列表中的元素,则可以使用列表的extend()方法。 示例代码:向列表添加元素(extend).py

b_list = ['x', 120]# 追加元组中的所有元素b_list.extend(("极客起源", "蒙娜丽宁"))print(b_list)       # ['x', 120, '极客起源', '蒙娜丽宁']# 追加列表中的所有元素b_list.extend(['A', 'B', 'C'])print(b_list)   # ['x', 120, '极客起源', '蒙娜丽宁', 'A', 'B', 'C']# 追加区间中的所有元素b_list.extend(range(99, 104))print(b_list) # ['x', 120, '极客起源', '蒙娜丽宁', 'A', 'B', 'C', 99, 100, 101, 102, 103]


4. 向列表插入元素(insert)

追加元素是指在列表最后插入元素,而如果希望在列表中间插入元素,则可以使用列表的insert()方法,使用insert()方法时要指定将元素要插入的位置。 示例代码:向列表插入元素(insert).py

c_list = list(range(1, 5))print(c_list) # [1, 2, 3, 4]# 在索引位3的位置插入一个字符串c_list.insert(3, '极客起源')print(c_list) # [1, 2, 3, '极客起源', 4]# 在索引为2处插入一个元组(将字符串转换为元组),元组被当成一个元素c_list.insert(2, tuple('蒙娜丽宁'))print(c_list)   # [1, 2, ('蒙', '娜', '丽', '宁'), 3, '极客起源', 4]


5. 删除列表元素

删除列表元素需要使用del语句。del 语句是Python的一种语句,专门用于执行删除操作,不仅可用于删除列表的元素,也可用于删除变量等操作。 使用del语句既可删除列表中的单个元素,也可直接删除列表的中间一段。 示例代码:删除列表元素.py

a_list = ['Python', 200, -12.4, (30, 12,5), 'UnityMarvel']# 删除第3个元素del a_list[2]print(a_list)       # ['Python', 200, (30, 12, 5), 'UnityMarvel']# 删除第2个到第4个(不包含)元素del a_list[1: 3]print(a_list)       # ['Python', 'UnityMarvel']b_list = list(range(1, 10))# 删除第3个到倒数第2个(不包含)元素,间隔为2del b_list[2: -2: 2]print(b_list)       # [1, 2, 4, 6, 8, 9]# 删除第3个到第5个(不包含)元素del b_list[2: 4]print(b_list)       # [1, 2, 8, 9]


使用del语句不仅可以删除列表元素,也可以删除普通变量。 示例代码:

name = 'UnityMarvel'print(name)         # UnityMarvel# 删除name变量del name#print(name)        # 抛出异常


上面的代码删除了name变量,因此接下来访问name变量时将会抛出异常(引发NameError错误)。除使用del语句之外,Python 还提供了remove()方法来删除列表元素,该方法并不是根据索引来删除列表元素的,而是根据元素本身来执行删除操作的。该方法只删除第1个找到的元素,如果找不到该元素,该方法将会抛出异常(引发ValueError错误)。 示例代码:

c_list = [20, 'Python', 30, -40, 'Node.js', 6.4]# 删除第一次找到的30c_list.remove(30)print(c_list) # [20, 'Python', -40, 'Node.js', 6.4]# 删除第一次找到的'Node.js'c_list.remove('Node.js')print(c_list) # [20, 'Python', -40, 6.4]# 清空列表c_list.clear()print(c_list) # []


在这段代码的最后,使用列表的clear方法清空了整个列表。 6. 修改列表元素

列表的元素相当于变量,因此程序可以对列表的元素赋值,这样即可修改列表的元素。 私立代码:修改列表元素.py

a_list = [True, False, -3.14, 'Python', 'UnityMarvel']# 对第3个元素赋值a_list[2] = 2.71828print(a_list)   # [True, False, 2.71828, 'Python', 'UnityMarvel']# 对倒数第1个元素赋值a_list[-1] = "超平台开发系统"print(a_list)   # [True, False, 2.71828, 'Python', '超平台开发系统']


上面代码通过索引对列表元素赋值,程序既可使用正数索引,也可使用负数索引。 此外,程序也可通过分片对列表其中一部分赋值, 在执行这个操作时并不要求新赋值的元素个数与原来的元素个数相等。 这意味着通过这种方式既可为列表增加元素,也可删除列表中的元素。 示例代码:

b_list = list(range(1, 5))print(b_list)   # [1, 2, 3, 4]# 将第2个到第4个(不包含)元素赋值为新列表的元素b_list[1: 3] = ['x', 'y']print(b_list)   #[1, 'x', 'y', 4]


如果对列表中空的分片赋值,就变成了为列表插入元素。 示例代码:

# 将第3个到第3个(不包含)元素赋值为新列表的元素,也就是插入操作b_list[2: 2] = ['t1', 't2']print(b_list) # 1, 'x', 't1', 't2', 'y', 4]


如果将列表其中一段赋值为空列表,就变成了删除列表中的元素。 示例代码:

# 将第3个到第6个(不包含)元素赋值为空列表,相当于删除操作b_list[2: 5] = []print(b_list) # [1, 'x', 4]


对列表使用分片语法赋值时,不能使用单个值。如果使用字符串赋值,Python 会自动把字符串当成序列处理,其中每个字符都是一 个元素。 实例代码:

# Python会自动将str分解成序列b_list[1: 3] = 'hello'print(b_list) # [1, 'h', 'e', 'l', 'l', 'o']


在使用分片语法赋值时,也可指定step参数。但如果指定了step参数,则要求所赋值的列表元素个数与所替换的列表元素个数相等。 示例代码:

c_list = list(range(1, 10))# 指定step为2,被赋值的元素有4个,因此用于赋值的列表也必须有4个元素c_list[2: 9: 2] = ['a', 'b', 'c', 'd']print(c_list) # [1, 2, 'a', 4, 'b', 6, 'c', 8, 'd']