Pythonic way to solve problems .
1) Sort character in a string
s = 'hello'
''.join(sorted(s))
2) Sort list
table = [(1, 'john', 23), \
(2, 'tom', 13), \
(3, 'lucy', 25), \
(4, 'kate', 4), \
(5, 'lily', 25)]
Don't do:
table.sort(cmp = lambda lhs, rhs: cmp(lhs[2], rhs[2]))
Do:
import operator
table.sort(key = operator.itemgetter(2))
3) Use s.join() to concatenate strings
4) Use 'list comprehension' to construct list
5) Use 'generator expression' as passed iteraterable arguments
6) Prefer use 'in' operator
7)
Don't do
if x != []:
do_something
Do:
if x:
do_something
8)
Don't do:
for i in range(len(seq)):
foo(seq[i], i)
Do:
for i , item in enumerate(seq):
foo(item, i)
9)
Don't do:
for i in range(len(seq1)):
foo(seq1[i], seq2[i])
Do:
for i, j in zip(seq1, seq2): # better clarity
foo(i, j)
Or
for i, j in itertools.izip(seq1, seq2): # better performance
foo(i, j)
10)
Don't do:
l = []
for i in seq:
l.append(foo(i))
Do:
l = map(foo, seq)
for i in itertools.imap(foo, seq):
bar(i)
11)
Don't do:
for i in range(len(seq) - 1, -1, -1):
foo(seq[i])
l = seq[:]
l.reverse()
for i in l:
foo(i)
Do:
for i in reversed(req):
foo(i)
12)
Don't do:
def foo(seq, bgn, end):
i = 0
while(bgn < end):
bar(seq[bgn], i)
bgn += 1
i += 1
def foo(seq, bgn, end):
tmp_seq = seq[bgn:end]
for i, item in enumerate(tmp_seq):
bar(item, i)
Do:
def foo(seq, bgn, end):
for begin, i in itertools.izip(range(bgn, end), itertools.counter()):
bar(seq[begin], i)
13)
Don't do:
for i in seq:
if pred(i):
foo(i)
Do:
for i in itertools.ifilter(pred, seq): # filter, ifilterfalse, better performance
foo(i)
14)
Don't do:
s = ''
for i in seq:
s += chr(i)
Do:
''.join(map(chr, seq))
Or
array.array('B', seq).tostring() # much better performance
All examples are from :
http://blog.csdn.net/lanphaday/article/details/2239445
http://blog.csdn.net/lanphaday/article/details/1548901