正文 【Python基础】3. 数据类型之列表及其操作 拾年之璐 V管理员 /2020年 /637 阅读 0803 ## 数据类型之列表及其操作 [TOC] ### 1. 什么是列表 **列表** 由一系列按特定顺序排列的元素组成。可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,所以列表的命名通常采用复数的名称(如names )。 在Python语言中,列表用 **`方括号`** **[ ]** 来表示,并用逗号来分隔其中的元素。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig'] print(fruits) ``` 示例输出: ```python ['banana', 'apple', 'cherry', 'pear', 'fig'] ``` 如果直接将一个列表输出,则打印信息包括方括号等内部表示信息。 ### 2. 列表的常用操作 #### 2.1 列表访问 **列表是有序集合**,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig'] print(fruits[0]) ``` 示例输出: ``` banana ``` 在Python中,**第一个列表元素的索引为0,而不是1**。 在Python中,**可通过将索引指定为-1 ,可让Python返回最后一个列表元素**。但是当列表为空时,该方法出错。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig'] print(fruits[-1]) ``` 示例输出: ``` fig ``` #### 2.2 列表增加 列表的增加主要有两种操作,一种是在末尾追加,另一种是在中间任意位置插入,分别用到两个方法,如下: + append(object) :将值object添加到列表的末尾 + insert(index, object) :将值object插入到列表的index位置(从0开始) 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig'] print(fruits) fruits.append('peach') print(fruits) fruits.insert(0, 'lemon') print(fruits) ``` 示例输出: ``` ['banana', 'apple', 'cherry', 'pear', 'fig'] ['banana', 'apple', 'cherry', 'pear', 'fig', 'peach'] ['lemon', 'banana', 'apple', 'cherry', 'pear', 'fig', 'peach'] ``` #### 2.3 列表修改 修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig'] print(fruits) fruits[0] = 'lemon' print(fruits) ``` 示例输出: ``` ['banana', 'apple', 'cherry', 'pear', 'fig'] ['lemon', 'apple', 'cherry', 'pear', 'fig'] ``` #### 2.4 列表删除 在Python中,可以根据位置或值来删除列表中的元素。主要方法如下: + del语句:如果知道要删除的元素在列表中的位置,可以使用del语句进行删除; + pop() 方法:把列表看做一个栈,末尾的元素为栈顶,则pop() 方法实现将末尾的元素弹出(删除);也可使用pop(index) 方法,将任意位置的元素弹出(删除) + remove(object) 方法:如果知道要删除元素的具体值,可以使用该方法进行删除。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] print(fruits) # 第一种删除方法 del fruits[0] print(fruits) # 第二种删除方法 fruit = fruits.pop() print(fruits) print(fruit) fruits.pop(0) print(fruits) # 第三种删除方法 fruits.remove('pear') print(fruits) ``` 示例输出: ``` ['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] ['apple', 'cherry', 'pear', 'fig', 'lemon'] ['apple', 'cherry', 'pear', 'fig'] lemon ['cherry', 'pear', 'fig'] ['cherry', 'fig'] ``` #### 2.5 列表组织与排序 可以对列表进行**永久排序**和**临时排序**,主要方法如下: + sort() :对列表进行永久性排序。如果赋值(reverse=True),可以实现倒序排序。 + sorted() :列表进行临时排序。如果赋值(reverse=True),可以实现倒序排序。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] print('原始列表:' + str(fruits)) print('临时排序:' + str(sorted(fruits))) print('原始列表:' + str(fruits)) fruits.sort() print('正序排序:' + str(fruits)) fruits.sort(reverse=True) print('倒序排序:' + str(fruits)) ``` 示例输出: ``` 原始列表:['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] 临时排序:['apple', 'banana', 'cherry', 'fig', 'lemon', 'pear'] 原始列表:['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] 正序排序:['apple', 'banana', 'cherry', 'fig', 'lemon', 'pear'] 倒序排序:['pear', 'lemon', 'fig', 'cherry', 'banana', 'apple'] ``` 当然还有部分其他的方法,如: + reverse() :翻转列表元素 + len() :获取列表长度 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] print('原始列表:' + str(fruits)) fruits.reverse() print('翻转列表:' + str(fruits)) print('列表长度:' + str(len(fruits))) ``` 示例输出: ``` 原始列表:['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] 翻转列表:['lemon', 'fig', 'pear', 'cherry', 'apple', 'banana'] 列表长度:6 ``` #### 2.6 列表切片 所谓列表切片,即截取列表中的部分元素组成一个新的列表。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] print('原始列表:' + str(fruits)) print('截取第2-4个元素:' + str(fruits[1:4])) print('截取前3个元素:' + str(fruits[:3])) print('截取第3个开始的剩余元素:' + str(fruits[2:])) print('截取最后2个元素:' + str(fruits[-2:])) ``` 示例输出: ``` 原始列表:['banana', 'apple', 'cherry', 'pear', 'fig', 'lemon'] 截取第2-4个元素:['apple', 'cherry', 'pear'] 截取前3个元素:['banana', 'apple', 'cherry'] 截取第3个开始的剩余元素:['cherry', 'pear', 'fig', 'lemon'] 截取最后2个元素:['fig', 'lemon'] ``` > 这里注意,起始位置需要减一。 #### 2.7 遍历列表 如果需要将列表中的每一个元素单独打印出来,或者每个元素都进行相同的处理,则需要对整个列表进行遍历。可以采用for循环来实现列表的遍历。 实例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] for fruit in fruits: print(fruit) ``` 示例输出: ``` banana apple cherry pear lemon ``` > 注意:关于for循环,要注意不要遗漏末尾的冒号(:),同时冒号后的缩进要保持一致,以保证对应的代码在for循环内。 我们再看一个示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] for fruit in fruits: print(fruit) print(fruits) ``` 这个示例的输出结果是这样的: ``` banana apple cherry pear lemon ['banana', 'apple', 'cherry', 'pear', 'lemon'] ``` 如果把这个示例改成这样: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] for fruit in fruits: print(fruit) print(fruits) ``` 没错,输出是这样的: ``` banana ['banana', 'apple', 'cherry', 'pear', 'lemon'] apple ['banana', 'apple', 'cherry', 'pear', 'lemon'] cherry ['banana', 'apple', 'cherry', 'pear', 'lemon'] pear ['banana', 'apple', 'cherry', 'pear', 'lemon'] lemon ['banana', 'apple', 'cherry', 'pear', 'lemon'] ``` 再改一下,改成这样: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] for fruit in fruits: print(fruit) print(fruits) ``` 会是什么结果呢?没错,编译器会报错的。 所以在for循环内,需要避免不必要的缩进。 对于前面的切片列表,也同样适用于遍历。如以下示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] for fruit in fruits[1:4]: print(fruit) ``` 示例输出: ``` apple cherry pear ``` #### 2.8 复制列表 列表的复制,可以采用切片来实现。 示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] fruits2 = fruits[:] print(fruits) print(fruits2) ``` 示例输出: ``` ['banana', 'apple', 'cherry', 'pear', 'lemon'] ['banana', 'apple', 'cherry', 'pear', 'lemon'] ``` 请看下面这个示例: ```python fruits = ['banana', 'apple', 'cherry', 'pear', 'lemon'] fruits_2 = fruits print(fruits) print(fruits_2) fruits.append('peach') print(fruits) fruits_2.append('watermelon') print(fruits_2) ``` 猜一下这个运行结果会怎样?是下面这样吗? ``` ['banana', 'apple', 'cherry', 'pear', 'lemon'] ['banana', 'apple', 'cherry', 'pear', 'lemon'] ['banana', 'apple', 'cherry', 'pear', 'lemon', 'peach'] ['banana', 'apple', 'cherry', 'pear', 'lemon', 'watermelon'] ``` 那么恭喜你,答错了。 实际运行结果是这样的: ``` ['banana', 'apple', 'cherry', 'pear', 'lemon'] ['banana', 'apple', 'cherry', 'pear', 'lemon'] ['banana', 'apple', 'cherry', 'pear', 'lemon', 'peach'] ['banana', 'apple', 'cherry', 'pear', 'lemon', 'peach', 'watermelon'] ``` 这是为什么呢? > 这里将fruits 赋给fruits_2 ,而不是将fruits 的副本存储到fruits_2。这种语法实际上是让Python将新变量fruits_2 关联到包含在fruits 中的列表,因此这两个变量都指向同一个列表。 ### 3. 数值列表 **列表非常适合来存储数字集合**。而Python提供了很多工具,可帮助你高效地处理数字列表。 Python也提供了一个函数:**`range() `**来帮助你快速生成一系列数字,然后使用 **`list()`** 函数将生成的一系列数字转换成列表。 关于 `range()` 的使用,主要有2种。 1. range(start , end):这种定义,默认步长为1,即从start开始,到end-1为止,生成一系列数字。 2. range(start , end , step):步长为step,从start开始,步长加step,直到最终结果达到或超过end为止。 示例: ```python numbers = list(range(3, 9)) print(numbers) numbers_2 = list(range(2, 14, 3)) print(numbers_2) ``` 示例输出: ``` [3, 4, 5, 6, 7, 8] [2, 5, 8, 11] ``` #### 3.1 数字列表的简单统计 主要有: + 求最大值max() + 求最小值min() + 求和sum() 示例: ```python numbers = list(range(3, 9)) print(numbers) print(min(numbers)) print(max(numbers)) print(sum(numbers)) ``` 示例输出: ``` [3, 4, 5, 6, 7, 8] 3 8 33 ``` #### 3.2 数值列表的应用 如:如何创建一个列表,其中包含前10个整数(即1~10)的平方呢? 示例: ```python squares = [] for value in range(1,11): square = value**2 squares.append(square) print(squares) ``` 可以简单一点: ```python squares = [] for value in range(1,11): squares.append(value**2) print(squares) ``` 也可以再简单一点: ```python squares = [value ** 2 for value in range(1, 11)] print(squares) ``` > 这种语法称为**列表解析**。 > > 要使用这种语法,首先指定一个描述性的列表名,如squares ;然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。在这个示例中,表达式为value**2 ,它计算平方值。接下来,编写一个for 循环,用于给表达式提供值,再加上右方括号。在这个示例中,for 循环为for value in range(1,11) ,它将值1~10提供给表达式value**2 。请注意,这里的for 语句末尾没有冒号。 以上三段示例的结果均为: ``` [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ``` ### 4. 元组 何为元组?在Python中,将不能修改的值称为**不可变的** ,而不可变的列表被称为**元组** 。 元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。 #### 4.1 元组的定义 下面这个示例是如何定义,并输出指定位置的元素示例: ```python months = (1, 3, 5, 7, 8, 10, 12) print(months) print(months[3]) ``` 示例输出: ``` (1, 3, 5, 7, 8, 10, 12) 7 ``` #### 4.2 元组的遍历 示例: ``` months = (1, 3, 5, 7, 8, 10, 12) print(months) for month in months: print(month) ``` 示例输出: ``` (1, 3, 5, 7, 8, 10, 12) 1 3 5 7 8 10 12 ``` #### 4.3 元组的修改 元组不能单独修改某个元素,但是可以对整个元组进行整体修改。 示例: ```python months = (1, 3, 5, 7, 8, 10, 12) print(months) months = (4, 6, 9, 11) print(months) ``` 示例输出: ``` (1, 3, 5, 7, 8, 10, 12) (4, 6, 9, 11) ``` 关于列表的相关基础知识到此结束。 > 参考文献: > > [1] Python编程:从入门到实践 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --