Python3基础之list列表实例解析
本文将进一步深入学习列表的使用。一、列表的方法list.append(x)在列表的尾部添加一个项等价于 a[len(a):] [x]。list.extend(L)将给定的列表L接到当前列表后面等价于 a[len(a):] L。list.insert(i, x)在给定的位置 i 前插入项例如a.insert(0, x) 会在列表的头部插入而 a.insert(len(a), x) 则等价于 a.append(x)。list.remove(x)移除列表中第一个值为 x 的项没有的话会产生一个错误。list.pop([i])删除列表给定位置的项并返回它。如果没指定索引a.pop()移除并返回列表最后一项。方括号表示可选list.clear()删除列表中的所有项相当于 del a[:]。list.index(x)返回列表中第一个值为 x 的项的索引。如果没有匹配的项, 则产生一个错误。list.count(x)返回列表中 x 出现的次数。list.sort()就地完成列表排序。list.reverse()就地完成列表项的翻转。list.copy()返回列表的一个浅拷贝相当于a[:]。二、列表当栈List的方法使得其可以很方便地作为一个栈来使用。我们知道栈的特点是最后进入的元素最先出来即后入先出用append()方法进行压栈用不指定索引的pop()方法进行出栈。示例代码如下1234567891011stack[]forxinrange(1,6):stack.append(x)# 入栈print(push, x, end )print(stack)print(Now stack is, stack)whilelen(stack)0:print(pop, stack.pop(), end )# 出栈print(stack)三、列表当队列列表还可以当作队列来使用队列的特性是第一个加入的元素第一个取出来即先入先出。然而把列表当队列使用效率并不高因为从列表的尾部添加和弹出元素是很快的而在列表的开头插入或弹出是比较慢的因为所有元素都得移动一个位置。要实现一个队列, 使用标准库的collections.deque 它被设计成在两端添加和弹出都很快。示例代码如下123456789101112fromcollectionsimportdequequeuedeque()# 创建空队列forxinrange(1,6):queue.append(x)# 入队print(push, x, end )print(list(queue))print(Now queue is,list(queue))whilelen(queue)0:print(pop, queue.popleft(), end )# 出队print(list(queue))四、列表推导式列表推导式提供了从序列创建列表的简单途径。通常程序会对序列的每一个元素做些操作并以其结果作为新列表的元素或者根据指定的条件来创建子序列。列表推导式的结构是在一个方括号里首先是一个表达式随后是一个 for 子句然后是零个或更多的 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。示例代码如下123456squares[x**2forxinrange(10)]# 推导式print(squares)# 输出是[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]pairs[(x, y)forxin[1,2,3]foryin[3,1,4]ifx!y]# 推导式print(pairs)# 输出是[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]五、列表嵌套Python中并没有二维数组的概念但我们可以通过列表嵌套达到同样的目的。12345mat[[1,2,3],[4,5,6],[7,8,9]]同样我们可以使用推导式生成嵌套的列表1234mat[[1,2,3], [4,5,6], [7,8,9]]new_mat[ [row[i]forrowinmat]foriin[0,1,2] ]# 嵌套print(new_mat)# 输出[[1, 4, 7], [2, 5, 8], [3, 6, 9]]附del语句del语句可以通过给定索引而不是值来删除列表中的项它与返回一个值的pop()方法不同。del语句也可以移除列表中的切片或者清除整个列表 123456789lst[1,2,3,4,5,6,7,8,9]dellst[2]# 删除指定索引项print(lst)dellst[2:5]# 删除切片print(lst)dellst[:]# 删除整个列表print(lst)del也可以用于删除变量实体dellst在删除变量实体之后引用 lst 的话会产生错误。