一、内置序列型数据结构简介:

Python内置序列型数据结构有列表(list)、元组(tuple)、字符串、Unicode字符串、缓冲对象(buffer objects)和范围(xrange)六种。其中,元组具有不可修改性

对于Python的序列型数据结构(sequence types),可进行的操作包括查下标(indexing)、分片(slicing)、相加(adding)、乘法(multiplying)、确定相互关系、求长度、查找最大最小元素和迭代。详细用法可以参考:javascript:void(0) 第四部分。

关于Python中列表与元组的部分,可以参考上述博文第五部分以及二D-列表推导式。

其中,del方法还能够用来删除字典元素。注意,python中若将对象赋值给None,变量名并未删除,对象数据被交给了垃圾回收机制。然而若是使用del方法,则对象的变量名被删除,其值则不一定。对象的值仍然存在于此对象的拷贝对象中或者被python垃圾回收机制回收。详见参考资料1第108页。

关于Python数据字典,详见上述博文第六部分。

Python 之Set, Heap和Dequeue

  • Python中的Set为无序序列,支持运算包括并集(union,|)、交集(intersection, &)、issubset、isupperset、大小比较、相减(differences)、 symmetric_difference和copy。详见参考资料228-229页。
  • Python中的heap为数据结构堆,符合在位置i的数值总是不小于在i//2位置的数值。Python堆含有的操作方法有:
  • heappush(heap, x):将元素x入堆
  • heappop(heap):从堆中弹出最小元素
  • heapify(list):将堆属性强制应用于一个列表
  • heapreplace(heap, x):将堆中最小元素弹出,同时将x入堆
  • nlargest(n, iter):返回iter中第n个最大元素
  • nsmallest(n, iter)。返回iter中第n个最小元素。heap操作具体示例见例1,需要导入heapq模块。
  • Python中的Deque为双向插入型数据结构,通过传入迭代创建。操作有append(val)、appendleft(val)、pop()、popleft()、rotate(num),其中appendleft和popleft分别为在对头插入和推出元素。rotate方法则为将队列中所有元素右移num个单位,若num小余0,则左移num个单位。关于deque的使用详见例2.

备注:相加操作add要使用frozenset,举例如下:

>>> a = set()
>>> b = set()
>>> a.add(b)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: set objects are unhashable
>>> a.add(frozenset(b))

例1:Python的堆操作

from heapq import *
from random import shuffle

data = list(xrange(10))
shuffle(data)
heap = []
for n in data:
    heappush(heap, n)

print heap

例2:Python deque使用:

>>> from collections import deque
>>> q = deque(xrange(10))
>>> q.appendleft(11)
>>> q
deque([11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> q.pop()
9
>>> q.popleft()
11
>>> q
deque([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> q.rotate(3)
>>> q
deque([6, 7, 8, 0, 1, 2, 3, 4, 5])
>>> q.rotate(-2)
>>> q
deque([8, 0, 1, 2, 3, 4, 5, 6, 7])