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 评论:
发表评论