首页 > 代码库 > Python 序列容器

Python 序列容器

Python中sequence主要包含存储单个元素序列和两个元素对的序列,str就是一个字符容器。

单元素序列主要有以下类型:

 bytearray: 字节数组,通过built-in 函数bytearray()创建
xrange:由函数xrange(n)/xrange(start, stop, step)创建,但不支持容器上的切片,连接,复制, in/not in 判断,min/max取值操作, xrange是   
       immutable sequence, xrange对象大小固定,与其代表范围大小无关,xrange主要用于循环,比range效率稍高,xrange上的操作只支持indexing,  iteration, len
list:链表mutable, [a,b,c],相当于其他语言中的数组链表集合体,因此也就部分LinkList和ArrayList
tuple: immutable list,非空tuple括号可有可无a,b,c 或(a,b,c) , empty tuple必须有括号(),  single item tuple 逗号必不可少 a, 或(a,);不能对tuple的某个元素赋值,但tuple中的元素可以是mutable
set:  mutable unordered hashtable, 支持数学操作并集合集等,因为无序,所以不支持indexing,slicing等顺序性操作  飞空{a,b,c} 空set(),支持issubset/union/intersection/difference
frozenset: immutable unordered hashtable

      双元素序列则主要是关联数组:

dict: hash_table, comma-separated list of key-value: {a:b, c:d} , empty dic: dic(),主要有以下方法:
        iter(d) is short for iterkeys()
        get(key)/has_key(key)/pop(key)/popitem()
        items(): return a copy of the dictionary‘s list of (key, value) pairs
        keys(): return a list of keys
        sorted(keys()): return a sorted list of keys
dictview: dict.viewkeys()/viewvalues()/viewitems() 返回,是dict的view,即dict变了,view也会变

Sequence主要操作就是增删改查,以下查操作优先级依次递增,s、t类型相同,n、i、j 是整形
OperationResultNotes
x in sTrue if an item of s is equal to x, else False(1)
x not in sFalse if an item of s is equal to x, else True(1)
s + tthe concatenation of s and t(6)
s * n, n * sn shallow copies of s concatenated(2)
s[i]ith item of s, origin 0(3)
s[i:j]slice of s from i to j(3)(4)
s[i:j:k]slice of s from i to j with step k(3)(5)
len(s)length of s 
min(s)smallest item of s 
max(s)largest item of s 
s.index(x)index of the first occurrence of x in s 
s.count(x)total number of occurrences of x in s 
容器之间也可以进行比较,依次比较容器中的每一个元素
如果s是str/unicode,  in/not in 判断x是否是s的字串
n<0时s*n = s*0 返回类型与s相同的空容器
如果i/j < 0, s[i/j] 的位置为len(s) + i/j,  但s[0]=s[-0]
i,j都可以省略,省略i则i=0, 省略j 则j=len(s), 如果i/j>len(s), 则取len(s), 如果i>=j, 则slice返回空
Sequence按可变性又可分为mutable和immutable:
immutable sequence: string, xrange, tuple, 一旦创建,不能再改变
mutable sequence: bytearray, list 可以添加元素或改变某个位置的元素,可变容器支持以下操作
OperationResultNotes
s[i] = xitem i of s is replaced by x 
s[i:j] = tslice of s from i to j is replaced by the contents of the iterable t 
del s[i:j]same as s[i:j] = [] 
s[i:j:k] = tthe elements of s[i:j:k] are replaced by those of t(1)
del s[i:j:k]removes the elements of s[i:j:k] from the list 
s.append(x)same as s[len(s):len(s)] = [x](2)
s.extend(x)same as s[len(s):len(s)] = x(3)
s.count(x)return number of i‘s for which s[i] == x 
s.index(x[, i[, j]])return smallest k such that s[k] == x and i <= k < j(4)
s.insert(i, x)same as s[i:i] = [x](5)
s.pop([i])same as x = s[i]; del s[i]; return x(6)
s.remove(x)same as del s[s.index(x)](4)
s.reverse()reverses the items of s in place(7)
s.sort([cmp[, key[, reverse]]])sort the items of s in place(7)(8)(9)(10)
t的长度需与slice长度相等
x可以为任何iterable 类型

Sequence遍历:
for x in s:...
      enumerate(): retrievethe position index and corresponding value  at the same time
     zip(): loop over two or more sequences at the same time
      iteritems(): retrieve the key and corresponding value at the same time while looping through dictionaries
      遍历集合时若需对集合进行修改,最好遍历集合的副本,slice[:]很容易获取集合的copy


Python 序列容器