Python idioms, 1 of n

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值