#pythonic
def reverse_str( s ):
return s[::-1]
#not pythonic
def reverse_str( s ):
t = ''
for x in xrange(len(s)-1,-1,-1):
t += s[x]
return t
#pythonic
x = [2, 3, 10, 9, 5, 6, 1, 8]
for k, v in enumerate(x, start=1):
print k, v
#not pythonic
for i in range(1,len(x)):
print i, x[i]
a, b = [1,2,3], [5,7,9,12]
#pythonic
#zip 在内存中创建由元组组成的第三个列表, 其中每一个元素都是带有指向原始数据指针的独立对象。换句话说,它需要比原来两个列表的总和还要使用更多的内存。
for m,n in zip(a,b):
print m,n
#对于较小的列表, zip是比较快的,但是如果列表较大建议使用izip, 因为izip 会在需要的时候优先使用迭代器,而不需要一上来就开辟一块很大的内存空间。
from itertools import izip
for m, n in izip(a, b):
print m,n
#not pythonic
n = min(len(a), len(b))
for i in range(n):
print a[i], b[i]
#pythonic
a, b = [1,2,3], [5,7,9]
print dict(zip(a,b))
#not pythonic
w = dict()
for i in range(len(a)):
w[a[i]] = b[i]
#无序版
a, b = [1,2,3], [5,7,9]
list(set(a))
#有序版
from collections import OrderedDict
#pythonic
for x in xrange(1,5):
if x == 5:
print 'find 5'
break
else:
print 'can not find 5!'
#not pythonic
find = False
for x in xrange(1,5):
if x == 5:
find = True
print 'find 5'
break
if not find:
print 'can not find 5!'
#pythonic
a = 3
b = 2 if a > 2 else 1
#not pythonic
if a > 2:
b = 2
else:
b = 1
numList = [1,2,3,4,5]
#pythonic
sum = sum(numList) #sum = 15
maxNum = max(numList) #maxNum = 5
minNum = min(numList) #minNum = 1
from operator import mul
prod = reduce(mul, numList, 1)
**#默认值传1以防空列表报错**
#not pythonic:
sum = 0
maxNum = -float('inf')
minNum = float('inf')
prod = 1
for num in numList:
if num > maxNum:
maxNum = num
if num < minNum:
minNum = num
sum += num
prod *= num
#pythonic :使用 defaultdict 或者 Counter
a = [1,2,3,4,5]
from collections import defaultdict
d = defaultdict(int)
for i in a:
d[i] += 1
#not very pythonic:
for i in a:
d = setdefaultdict(i,0) + 1
# not Pythonic:使用 get() 方法
d = {}
for i in a:
d[i] = d.get(i, 0) + 1
defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。
defaultdict类除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,到时该函数的返回结果作为默认值,这样使得默认值的取值更加灵活。比如:
d = defaultdict(lambda:10)
setdefault(key[, default])与defaultdict(function_factory)基本差不多,但是后者速度更快。
a = {'a':1,'b':2}
b = {'c':3}
# pythonic:注意这里是拷贝
new_dict = a.copy()
new_dict.update(b)
#等价于:
new_dict = dict(a, **b)
# not pythonic
new_dict = dict(a.items()+b.items())
参考文献:
1 http://www.jb51.net/article/56719.htm
2 http://www.cnblogs.com/xueweihan/p/5160998.html