Counter
Counter是dict的子类,用于计算一个可迭代对象各元素的个数。其对象的键是出现过的对象,值是其出现的个数。
初始化
使用一个可迭代对象进行初始化:
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与普通list的append一样,将元素追加到对象的最右端,而appendleft则相反,将元素追加到对象的最左端。
dq.append(4)
dq.appendleft(4)
pop与popleft
pop从右侧弹出元素,而popleft从左侧弹出元素。
与list的pop不同,deque的pop不能接受参数,仅能从最右边弹出元素。
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
OrderedDict是dict的一个子类,不同之处在于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 评论:
发表评论