Snowwwolf's Blog

My Blog, My Work, My Life.

Python Tips

enumerate

enumerate 用于遍历, 与for in相比, 可同时返回index和element

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> for i, elem in enumerate(seasons):
...   print i, elem
... 
0 Spring
1 Summer
2 Fall
3 Winter
>>> 

Counter

collection.Counter 专用于计数

>>> from collections import Counter
>>> c = Counter('ABBEDDAD')
>>> c.keys()
['A', 'B', 'E', 'D']
>>> c.values()
[2, 2, 1, 3]
>>> c.items()
[('A', 2), ('B', 2), ('E', 1), ('D', 3)]

map & reduce

map & reduce 是Map-Reduce中的map(注意不是C++ STL中的树容器map)和reduce

map用于对每一个元素执行一个一元函数/lambda

reduce用于对初值或当前结果与每一个元素执行一个二元函数/lambda, 得到下一个结果, 再与下一个元素执行这个二元函数/lambda

参考:

>>> map(lambda x:x+x,range(5))   #lambda 函数,各项+本身
[0, 2, 4, 6, 8]
>>> reduce(add,range(11))        #1+2+3+...+10
55

Conditional Expression

Conditional Expression:

x = true_value if condition else false_value

Python缺少三元 condition ? true_value : false_value 运算符, 所以当需要实现这种逻辑的时候, 之前喜欢用 condition and true_value or false_value 的方式. 但是这种方式很容易出bug, 比如 condition ? 0 : 1, 就会发现无论condition, 总是返回1. (虽然可以用 condition ? [0]: [1])[0] 解决, 但是太丑了)

PEP308 建议通过这种Conditional Expression的方式实现