Oct 28, 2018
Python collections
collections
defaultdict
defaultdict
dict subclass that calls a factory function to supply missing values
Returns a new dictionary-like object. defaultdict
is a subclass of the built-in dict
class. It overrides one method and adds one writable instance variable. The remaining functionality is the same as for the dict
class and is not documented here.
OrderedDict
OrderedDict
dict subclass that remembers the order entries were added
Return an instance of a dict subclass, supporting the usual dict
methods. An OrderedDict
is a dict that remembers the order that keys were first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end.
deque
deque
Returns a new deque
object initialized left-to-right (using append()
) with data from iterable. If iterable is not specified, the new deque is empty.
Deques are a generalization of stacks and queues (the name is pronounced “deck” and is short for “double-ended queue”). Deques support thread-safe, memory efficient appends and pops from either side of the deque with approximately the same O(1)
performance in either direction.
Though list
objects support similar operations, they are optimized for fast fixed-length operations and incur O(n) memory movement costs for pop(0)
and insert(0, v)
operations which change both the size and position of the underlying data representation.
append
(x)
Add x to the right side of the deque.
appendleft
(x)
Add x to the left side of the deque.
clear
()
Remove all elements from the deque leaving it with length 0.
count
(x)
Count the number of deque elements equal to x.
extend
(iterable)
Extend the right side of the deque by appending elements from the iterable argument.
extendleft
(iterable)
Extend the left side of the deque by appending elements from iterable. Note, the series of left appends results in reversing the order of elements in the iterable argument.
pop
()
Remove and return an element from the right side of the deque. If no elements are present, raises an IndexError
.
popleft
()
Remove and return an element from the left side of the deque. If no elements are present, raises an IndexError
.
remove
(value)
Remove the first occurrence of value. If not found, raises a ValueError
.
reverse
()
Reverse the elements of the deque in-place and then return None
.
rotate
(n=1)
Rotate the deque n steps to the right. If n is negative, rotate to the left.
When the deque is not empty, rotating one step to the right is equivalent to d.appendleft(d.pop())
, and rotating one step to the left is equivalent to d.append(d.popleft())
.
Deque objects also provide one read-only attribute:maxlen
Maximum size of a deque or None
if unbounded.
>>> from collections import deque
>>> d = deque('ghi') # make a new deque with three items
>>> for elem in d: # iterate over the deque's elements
... print elem.upper()
G
H
I
>>> d.append('j') # add a new entry to the right side
>>> d.appendleft('f') # add a new entry to the left side
>>> d # show the representation of the deque
deque(['f', 'g', 'h', 'i', 'j'])
>>> d.pop() # return and remove the rightmost item
'j'
>>> d.popleft() # return and remove the leftmost item
'f'
>>> list(d) # list the contents of the deque
['g', 'h', 'i']
>>> d[0] # peek at leftmost item
'g'
>>> d[-1] # peek at rightmost item
'i'
>>> list(reversed(d)) # list the contents of a deque in reverse
['i', 'h', 'g']
>>> 'h' in d # search the deque
True
>>> d.extend('jkl') # add multiple elements at once
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> d.rotate(1) # right rotation
>>> d
deque(['l', 'g', 'h', 'i', 'j', 'k'])
>>> d.rotate(-1) # left rotation
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> deque(reversed(d)) # make a new deque in reverse order
deque(['l', 'k', 'j', 'i', 'h', 'g'])
>>> d.clear() # empty the deque
>>> d.pop() # cannot pop from an empty deque
Traceback (most recent call last):
File "<pyshell#6>", line 1, in -toplevel-
d.pop()
IndexError: pop from an empty deque
>>> d.extendleft('abc') # extendleft() reverses the input order
>>> d
deque(['c', 'b', 'a'])
Last updated