ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CSDN21天学习挑战赛——Python数据结构学习笔记

CSDN21天学习挑战赛——Python数据结构学习笔记 ​活动地址CSDN21天学习挑战赛一、列表listpython中列表是可变对象这是它区别于字符串、元组最重要的特点。列表是Python 语言核心的一部分。虽然名字叫列表但它实际上是以动态数组实现的。这意味着列表能够添加或删除元素还能分配或释放内存来自动调整存储空间。Python 列表可以包含任意元素因为Python 中一切皆为对象连函数也是对象。因此不同的数据类型可以混合存储在一个列表中。这个功能很强大但缺点是同时支持多种数据类型会导致数据存储得不是很紧凑。因此整个结构占据了更多的空间。1、python中列表的方法方法描述list.append(x)把一个元素添加到列表的结尾相当于 a[len(a):] [x]。list.extend(L)通过添加指定列表的所有元素来扩充列表相当于 a[len(a):] L。list.insert(i, x)在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引例如 a.insert(0, x) 会插入到整个列表之前而 a.insert(len(a), x) 相当于 a.append(x) 。list.remove(x)删除列表中值为 x 的第一个元素。如果没有这样的元素就会返回一个错误。list.pop([i])从列表的指定位置移除元素并将其返回。如果没有指定索引a.pop()返回最后一个元素。元素随即从列表中被移除。方法中 i 两边的方括号表示这个参数是可选的而不是要求你输入一对方括号你会经常在 Python 库参考手册中遇到这样的标记。list.clear()移除列表中的所有项等于del a[:]。list.index(x)返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。list.count(x)返回 x 在列表中出现的次数。list.sort()对列表中的元素进行排序。list.reverse()倒排列表中的元素。list.copy()返回列表的浅复制等于a[:]。2、将列表当作堆栈使用栈限定仅在表尾进行插入和删除操作的线性表。栈是含有一组对象的容器支持快速后进先出LIFO的插入和删除操作。与列表或数组不同栈通常不允许随机访问所包含的对象。插入和删除操作通常称为入栈push和出栈pop。现实世界中与栈数据结构相似的是一叠盘子。新盘子会添加到栈的顶部。由于这些盘子非常宝贵且很重所以只能移动最上面的盘子后进先出。要到达栈中位置较低的盘子必须逐一移除最顶端的盘子。列表方法使得列表可以很方便的作为一个堆栈来使用堆栈作为特定的数据结构最先进入的元素最后一个被释放后进先出。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。 stack [3, 4, 5] stack.append(6) stack.append(7) stack [3, 4, 5, 6, 7] stack.pop() 7 stack [3, 4, 5, 6] stack.pop() 6 stack.pop() 5 stack [3, 4]3、将列表当作队列使用栈和队列相似都是线性的元素集合但元素的访问顺序不同。从队列删除元素时移除的是最先添加的项先进先出FIFO而栈是移除最近添加的项后进先出LIFO。把列表当做队列用只是在队列里第一加入的元素第一个取出来但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快然而在列表里插入或者从头部弹出速度却不快因为所有其他的元素都得一个一个地移动。 from collections import deque queue deque([Eric, John, Michael]) queue.append(Terry) # Terry arrives queue.append(Graham) # Graham arrives queue.popleft() # The first to arrive now leaves Eric queue.popleft() # The second to arrive now leaves John queue # Remaining queue in order of arrival deque([Michael, Terry, Graham])4、嵌套列表解析对列表进行嵌套3*4矩阵列表 matrix [ ... [1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12], ... ]将3*4矩阵列表转化为4*3列表[[row[i] for row in matrix] for i in range(4)] [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]等价于 transposed [] for i in range(4): ... # the following 3 lines implement the nested listcomp ... transposed_row [] ... for row in matrix: ... transposed_row.append(row[i]) ... transposed.append(transposed_row) ... transposed [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]5、del语句del 语句可以从一个列表中根据索引来删除一个元素而不是值来删除元素。这与使用 pop() 返回一个值不同。可以用 del 语句从列表中删除一个切割或清空整个列表我们以前介绍的方法是给该切割赋一个空列表。 a [-1, 1, 66.25, 333, 333, 1234.5] del a[0] a [1, 66.25, 333, 333, 1234.5] del a[2:4] a [1, 66.25, 1234.5] del a[:] a []三、元组tuplePython 的元组对象是不可变的。这意味着不能动态添加或删除元素元组中的所有元素都必须在创建时定义。就像列表一样元组可以包含任意数据类型的元素。这具有很强的灵活性但也意味着数据的打包密度要比固定类型的数组小。元组由若干逗号分割的值组成在输出时总是有括号便于正确表达嵌套结构 t 12345, 54321, hello! t[0] 12345 t (12345, 54321, hello!) # Tuples may be nested: ... u t, (1, 2, 3, 4, 5) u ((12345, 54321, hello!), (1, 2, 3, 4, 5))四、集合set集合含有一组不含重复元素的无序对象。集合可用来快速检查元素的包含性插入或删除值计算两个集合的并集或交集。可以用大括号({})创建集合。注意如果要创建一个空集合你必须用 set() 而不是 {} 后者创建一个空的字典。set是Pyhton中的内置集合实现set类型是可变对象能够动态插入和删除元素。示例 basket {apple, orange, apple, pear, orange, banana} print(basket) # 删除重复的 {orange, banana, pear, apple} orange in basket # 检测成员 True crabgrass in basket False # 以下演示了两个集合的操作 ... a set(abracadabra) b set(alacazam) a # a 中唯一的字母 {a, r, b, c, d} a - b # 在 a 中的字母但不在 b 中 {r, d, b} a | b # 在 a 或 b 中的字母 {a, c, r, d, b, m, z, l} a b # 在 a 和 b 中都有的字母 {a, c} a ^ b # 在 a 或 b 中的字母但不同时在 a 和 b 中 {r, d, b, m, z, l}五、字典在Python 中字典是核心数据结构。字典可以存储任意数量的对象每个对象都由唯一的字典键标识。字典通常也被称为映射、散列表、查找表或关联数组。字典能够高效查找、插入和删除任何与给定键关联的对象。字典是计算机科学中最常用且最重要的数据结构之一。序列是以连续的整数为索引与此不同的是字典以关键字为索引关键字可以是任意不可变类型通常用字符串或数值。理解字典的最佳方式是把它看做无序的键值对集合。在同一个字典之内关键字必须是互不相同。一对大括号创建一个空的字典{}。示例 tel {jack: 4098, sape: 4139} tel[guido] 4127 tel {sape: 4139, guido: 4127, jack: 4098} tel[jack] 4098 del tel[sape] tel[irv] 4127 tel {guido: 4127, irv: 4127, jack: 4098} list(tel.keys()) [irv, guido, jack] sorted(tel.keys()) [guido, irv, jack] guido in tel True jack not in tel False构造函数 dict() 直接从键值对元组列表中构建字典。如果有固定的模式列表推导式指定特定的键值对 dict([(sape, 4139), (guido, 4127), (jack, 4098)]) {sape: 4139, jack: 4098, guido: 4127}如果关键字只是简单的字符串使用关键字参数指定键值对有时候更方便 dict(sape4139, guido4127, jack4098) {sape: 4139, jack: 4098, guido: 4127}
返回列表