4.4 列表(list)
列表是Python中使用最频繁也是最重要最灵活的一种数据结构。Python列表中的元素类型可以不同,可以存放各种各样的数据,比如:数字、字符串、函数、类、字典等,甚至还可以嵌套存放列表。
列表也是一种序列,可以通过索引获取列表中的元素。支持序列的各种操作。
4.4.1 列表的创建
4.4.1.1 通过列表标识符号创建
列表在创建的时候用[]
做标识。内部的元素用逗号进行分隔。
>>> lst1 = [] # 空列表
>>> lst2 = [1, 1, 2, 3, 5] # 列表中存放的全是数字
>>> lst3 = [\'a\', \'b\', \'c\'] # 列表中存放的全是字符
>>> lst4 = [1, \'a\', \'中\'] # 列表中存放混合数据
>>> lst5 = [\'red\', \'green\', \'blue\'] # 列表中存放的全是字符串
4.4.1.2 通过列表推导创建
>>> [x for x in range(5)]
[0, 1, 2, 3, 4]
>>> [x * x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x*x for x in range(10) if x%3 == 0]
[0, 9, 36, 81]
>>> [[x, y] for x in range(3) for y in range(3)]
[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
>>> [[x, y] for x in range(5) for y in range(5) if y >= x]
[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [3, 4], [4, 4]]
4.4.1.3 通过list函数创建
list函数可以将一个可迭代对象
转换成列表。
>>> print(list(\'Python\'))
[\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
4.4.1.4 列表的拼接和重复
参见可迭代对象
章节中的序列的拼接和重复
4.4.2 列表的访问
4.4.2.1 列表索引
参见可迭代对象
章节中的序列的索引
4.4.2.2 列表切片
参见可迭代对象
章节中的序列的切片
4.4.2.3 遍历列表
参见可迭代对象
章节中的可迭代对象的遍历
4.4.2.4 成员资格检查
参见可迭代对象
章节中的成员资格检查
4.4.3 列表的修改
列表不同于字符串,是可以原地修改的。
4.4.3.1 单个元素的修改
可以通过索引的方式修改单个元素:
>>> lst = [\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
>>> lst[0] = \'J\'
>>> lst
[\'J\', \'y\', \'t\', \'h\', \'o\', \'n\']
4.4.3.2 多个元素的修改
可以通过切片的方式修改多个元素:
>>> lst = [\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
>>> lst[0:4] = \'Java\'
>>> lst
[\'J\', \'a\', \'v\', \'a\', \'o\', \'n\']
>>> lst = [\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
>>> lst[0:4] = [\'Java\']
>>> lst
[\'Java\', \'o\', \'n\']
4.4.4 列表的删除
4.4.4.1 删除列表元素
通过索引删除单个元素
>>> lst = [\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
>>> del lst[0]
>>> print(lst)
[\'y\', \'t\', \'h\', \'o\', \'n\']
通过切片删除多个元素
>>> lst = [\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
>>> del lst[0:2]
>>> lst
[\'t\', \'h\', \'o\', \'n\']
4.4.4.2 删除整个列表
>>> lst = [\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
>>> del lst
>>> lst
Traceback (most recent call last):
File \"E:\\studypy\\tmp.py\", line 3, in
print(lst)
NameError: name \'lst\' is not defined. Did you mean: \'list\'?
4.4.5 列表的方法
4.4.5.1 增加元素
4.4.5.1.1 append(x)
描述
在列表末尾添加一个元素,相当于a[len(a):] = [x]。
示例
lst = list(\'Python\')
lst.append(\'1\')
print(lst)
[\'P\', \'y\', \'t\', \'h\', \'o\', \'n\', \'1\']
4.4.5.1.2 extend(iterable)
描述
用可迭代对象的元素扩展列表。相当于 a[len(a):] = iterable。
示例
lst = list(\'Python\')
lst.extend(\'Java\')
print(lst)
[\'P\', \'y\', \'t\', \'h\', \'o\', \'n\', \'J\', \'a\', \'v\', \'a\']
lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
lst1.extend(lst2)
print(lst1)
[1, 2, 3, 4, 5, 6]
4.4.5.1.3 insert(i, x)
描述
在指定位置插入1个元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素,a.insert(len(a), x) 等同于 a.append(x)。
示例
lst = list(\'Python\')
lst.insert(0, \'Java\')
print(lst)
[\'Java\', \'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
4.4.5.2 删除元素
4.4.5.2.1 remove(x)
描述
从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常。
示例
lst = list(\'Python\')
lst.remove(\'o\')
print(lst)
lst.remove(\'o\')
print(lst)
[\'P\', \'y\', \'t\', \'h\', \'n\']
Traceback (most recent call last):
File \"E:\\studypy\\tmp.py\", line 4, in
lst.remove(\'o\')
ValueError: list.remove(x): x not in list
4.4.5.2.2 pop([i])
描述
删除列表中指定位置的元素(第i个元素,如果索引越界了则会报错:IndexError),并返回被删除的元素。
未指定位置时,a.pop() 删除并返回列表的最后一个元素。
示例
lst = list(\'Python\')
lst.pop()
print(lst)
lst.pop(0)
print(lst)
lst.pop(10)
print(lst)
[\'P\', \'y\', \'t\', \'h\', \'o\']
[\'y\', \'t\', \'h\', \'o\']
Traceback (most recent call last):
File \"E:\\studypy\\tmp.py\", line 6, in
lst.pop(10)
IndexError: pop index out of range
4.4.5.2.3 clear()
描述
删除列表里的所有元素,相当于 del lst[:]。
注意:del lst[:] 是情况整个列表,使得列表为空。列表还存在,只不过是个空的列表(里面没有元素了)。而 del lst是删除这个列表。列表不存在了,再次引用该列表则会报错。
示例
lst = list(\'Python\')
lst.clear()
print(lst)
[]
4.4.5.3 查询统计类
4.4.5.3.1 count(x)
参见可迭代对象
章节中序列
小节中的序列count
方法
4.4.5.3.2 index(x[, start[, end]])
参见可迭代对象
章节中序列
小节中的序列index
方法
4.4.5.3.3 sort(*, key=None, reverse=False)
描述
就地排序列表中的元素,要了解自定义排序参数,详见后面的sorted函数。
示例
lst = list(\'Python132\')
lst.sort(reverse=True) # 倒序
print(lst)
lst = list(\'Python132\')
lst.sort(reverse=False) # 顺序
print(lst)
[\'y\', \'t\', \'o\', \'n\', \'h\', \'P\', \'3\', \'2\', \'1\']
[\'1\', \'2\', \'3\', \'P\', \'h\', \'n\', \'o\', \'t\', \'y\']
4.4.5.3.4 reverse()
描述
就地翻转列表中的元素。
示例
lst = list(\'Python132\')
lst.reverse()
print(lst)
[\'2\', \'3\', \'1\', \'n\', \'o\', \'h\', \'t\', \'y\', \'P\']
4.4.5.4 其它
4.4.5.4.1 copy()
描述
返回列表的拷贝。相当于 lst[:] 。
示例
lst = list(\'Python\')
lst2 = lst.copy()
print(lst2)
[\'P\', \'y\', \'t\', \'h\', \'o\', \'n\']
4.4.6 用列表实现堆栈和队列
4.4.6.1 实现堆栈
使用列表方法实现堆栈非常容易,最后插入的最先取出(“后进先出”)。把元素添加到堆栈的顶端,使用 append() 。从堆栈顶部取出元素,使用 pop() ,不用指定索引。例如:
stack = [3, 4, 5]
stack.append(6)
stack.append(7)
print(stack)
stack.pop()
print(stack)
stack.pop()
stack.pop()
print(stack)
[3, 4, 5, 6, 7]
[3, 4, 5, 6]
[3, 4]
4.4.6.2 实现队列
列表也可以用作队列,最先加入的元素,最先取出(“先进先出”);然而,列表作为队列的效率很低。因为,在列表末尾添加和删除元素非常快,但在列表开头插入或移除元素却很慢(因为所有其他元素都必须移动一位)。
实现队列最好用 collections.deque,可以快速从两端添加或删除元素。例如:
from collections import deque
queue = deque([\"red\", \"green\", \"blue\"])
queue.append(\"black\")
queue.append(\"white\")
print(queue)
queue.popleft()
print(queue)
queue.pop()
print(queue)
print(list(queue))
deque([\'red\', \'green\', \'blue\', \'black\', \'white\'])
deque([\'green\', \'blue\', \'black\', \'white\'])
deque([\'green\', \'blue\', \'black\'])
[\'green\', \'blue\', \'black\']
从自动化办公到智能化办公
来源:https://www.cnblogs.com/sibide/p/16390600.html
本站部分图文来源于网络,如有侵权请联系删除。