python代碼優化

  • 優化一:
    原代碼
num =range(10)
size = len(num)
events = []
i =0
while i<size:
    if i%2==0:
        events.append(i)
    i+=1
events

改進方法:list comprehensions

events = [i for i in range(10) if i%2 ==0]

優化二:enumerate

i=0
seq = ["one","two","three"]
for element in seq:
    seq[i] = '%d:%s' %(i,seq[i])
    i+=1
seq
['0:one','1:two','2:three']

替代:

seq = ['one','two','three']
for i,element in enumerate(seq):
    seq[i] = '%d:%s' %(i,seq[i])

思考 enumrate(list()) 獲取2個值 ,爲什麼for循環裏面不用element 替代seq[i]呢?

還可以用list comprehension:

def _treatment(pos,element):
    return '%d:%s' %(pos,element)

seq = ["one","two","three"]
[_treatment(i,el) for i,el in enumrate(seq)]

迭代器itertools獲取序列中間數據

import itertools
def starting_at_five():
    value = raw_input().strip()
    while value !='':
        for el in itertools.islice(value.split(),4,None):
            yield el
        value = raw_input().strip()
iter = starting_at_five()
iter.next()
---one two three four five six--
iter.next()
--five--
iter.next()
--six--

python 遞歸:

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

棧溢出,遞歸優化

def fact(n):
    return fact_iter(n, 1)

def fact_iter(num, product):
    if num == 1:
        return product
    return fact_iter(num - 1, num * product)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章