python标准库

python的标准库

使用setdefault()和defaultdict()处理缺失的健

读取字典中不存在的健的值就会发生异常,使用字典函数get()返回一个默认值会避免异常发生,函数setdefault()类似get(),但当健不存在的时候它会在字典中添加一项

>>> periodic_table={'Hydrogen':1,'Helium':2}
>>> print periodic_table
{'Helium': 2, 'Hydrogen': 1}
如果键不在字典中,新的默认值会被添加进去

>>> catrbon=periodic_table.setdefault('Carbon',12)
>>> periodic_table
{'Helium': 2, 'Hydrogen': 1, 'Carbon': 12}

如果试图把一个不同的默认值赋值给已经存在的健,不会改变原来的值,仍会返回初始值;

使用Counter()计数

>>> from collections import Counter
>>> breakfast=['spam','spam','eggs','spam']
>>> breakfast_counter=Counter(breakfast)
>>> breakfast_counter
Counter({'spam': 3, 'eggs': 1})

函数most_common()以降序返回所有的元素,或者给定一个数字,会返回该数字前
的元素

>>> breakfast_counter.most_common()
[('spam', 3), ('eggs', 1)]
>>> breakfast_counter.most_common(1)
[('spam', 3)]

新建一个列表lunch和一个计数器lunch_counter

>>> lunch=['eggs','eggs','bacon']
>>> lunch_counter=Counter(lunch)
>>> lunch_counter
Counter({'eggs': 2, 'bacon': 1})

第一种组合计数器的方式是是使用+

>>> breakfast_counter+lunch_counter
Counter({'eggs': 3, 'spam': 3, 'bacon': 1})
从一个计数器中去掉另一个使用-
>>> breakfast_counter-lunch_counter
Counter({'spam': 3})
可以使用交集运算符&得到两个共有的项
>>> breakfast_counter&lunch_counter
Counter({'eggs': 1})
最后使用|得到所有的元素
>>> breakfast_counter|lunch_counter
Counter({'spam': 3, 'eggs': 2, 'bacon': 1})

‘eggs’’是两者共有的项,不同于和并,并集并没有把计数加起来,而是取其中较大的值,

使用有序字典orderedDict()按健排序

一个字典中的顺序是不可预知的,你可以按照添加顺序添加键abc,但函数keys()可能会返回c,a,b

>>> quotes={'Moe':'A wise guy,huh?','Larry':'Ow!','Curly':'Nyuk nyuk!'}
>>> for stooge in quotes:
...     print stooge
... 
Larry
Curly
Moe

有序字典orderedDict()记忆字典添加顺序,然后从一个迭代器按照顺序返回。

>>> quotes=OrderedDict([('Moe','A wise guy ,huh?'),('Larry','Ow!'),('Curly','Nyuk,nyuk!')])
>>> for stooge in quotes:
...     print stooge
... 
Moe
Larry
Curly

双端队列:栈+队列

Deque是一种双端队列,同时具有栈和队列的特征,它可以从序列的任何一端添加或删除。函数popleft()去掉最左边的项并返回该项,pop()去掉最右边的项并返回该项。
现在从一个词的两端开始扫向中间,判断是否回文

>>> def palindrome(word):
...     from collections import deque
...     dq=deque(word)
...     while len(dq)>1:
...             if dq.popleft() != dq.pop():
...                     return False
...     return True
... 
>>> palindrome('radar')
True
>>> palindrome('halibt')
False

如果你想写一个快速判断是否回文的程序,只需要把字符串反转和原字符串向比较就可以了

>>> def another_palindrome(word):
...     return word==word[::-1]
... 
>>> another_palindrome('radar')
True

使用itertools迭代代码结构

Itertools包含特殊用途的迭代器函数,在for ...in 循环中调用函数,每次会返回一项,并记住当前调用的状态;
即是chain()的参数只是单个迭代对象,它也会使用参数进行迭代

>>> import itertools
>>> for item in itertools.chain([1,2],['a','b']):
...     print item
... 
1
2
a
b
原文地址:https://www.cnblogs.com/hanfei-1005/p/5703819.html