2014年4月16日星期三

collections模块总结

Counter

Counterdict的子类,用于计算一个可迭代对象各元素的个数。其对象的键是出现过的对象,值是其出现的个数。

初始化

使用一个可迭代对象进行初始化:

cnt = Counter()#1
cnt = Counter(u"kjhasdfkjbdvkjlbaskjfdasfkjghakcsjvbsdajfhaksjdf")#2
cnt = Counter({'a': 4, 'b': 2})#3
cnt = Counter(a=4, b=2)#4

其中第三个和第四个相同。

对象方法

用类似遍历dict的方式遍历

#1
for k in cnt:
    print k, cnt[k]

#2
for i in cnt.items():
    print i

用Counter独有方式遍历

升序排列列出的所有元素。

#1
for e in cnt.elements():
    print e

筛选出现次数最多的n个元素

其中次数为0或负数的元素会被忽略,没有给出数目则输出所有元素。

print cnt.most_common(3)
print cnt.most_common()

更新对象

对应项加上给出的可迭代对象中的元素个数。

cnt.update("jjjlvcdl")
print cnt

对应项减去给出的可迭代对象中的元素个数。

cnt.subtract("jjjlvcdl")
print cnt

deque

deque是双端队列,不仅可以从队头和队尾进出(且优化了两端的访问),还基本能表现得像一个list(除pop方法有参数差异外)。

初始化

使用可迭代对象初始化deque

dq = deque((1,2,3))

其中deque有个可选的参数maxlen,如果没有指定,则可以创建一个空间可扩展(自动)的双端队列;如果指定了maxlen,则创建一个有限空间的双端队列,当队满时进行元素压入,则会把另一侧最外的元素挤出。

对象方法

append与appendleft

append与普通listappend一样,将元素追加到对象的最右端,而appendleft则相反,将元素追加到对象的最左端。

dq.append(4)
dq.appendleft(4)

pop与popleft

pop从右侧弹出元素,而popleft从左侧弹出元素。
listpop不同,dequepop不能接受参数,仅能从最右边弹出元素。

dq.pop()
dq.popleft()

extend与extendleft

list一样,extend将一个可迭代对象中的元素从右侧加入到对象中,而extendleft则从左侧加入,注意压入元素的顺序从参数的可迭代对象第一个元素开始。

dq.extend(xrange(4,10))
dq.extendleft(xrange(4,10))

遍历

deque可以使用下标访问:

for i in xrange(4,10):
    print dq[3]
    del dq[3]

rotate

演示使用rotate实现一个跑马灯。

horse = deque(u"====马====")
for i in xrange(100):
    print u"".join(horse)
    horse.rotate(1)

namedtuple

使用指定类名和属性快速创建tuple的一个子类

初始化

快速实现一个点类型,此时point是类Point的一个引用:

point = namedtuple("Point", ("x", "y"))

point可以使用参数列表和参数赋值的方式初始化:

p = point(5, y=11)

使用对象的属性

像tuple一样使用下标

print p[0],p[1]

像对象一样使用

print p.x,p.y

对象属性是只读的

对象是mutable的,不能修改:

try:
    p.x = 30
except AttributeError:
    print p.x

作为原型使用

通过当前对象作为原型新建对象

使用字典作为中间转换

d = p._asdict()
d["x"] = 30
a = point(**d)
print a

使用_replace方法

b = p._replace(x=30)
print b

OrderedDict

OrderedDictdict的一个子类,不同之处在于OrderedDict的键的顺序是按插入顺序固定的,而dict则是乱序的。

od = OrderedDict(((2,3),(4,5),(0,1)))
d = dict(((2,3),(4,5),(0,1)))

print od.keys()
print d.keys()

@LYC
转载请注明出处。

0 评论:

发表评论