1. 程式人生 > ><每日一題>題目19:簡單的程序執行效率面試題

<每日一題>題目19:簡單的程序執行效率面試題

sorted 最長 面試 imp () nds 面試題 div seconds

# 將下面的函數按照執行效率高低排序。它們都接受由0至1之間的數字構成的列表作為輸入。這個列表可以很長。一個輸入列表的示例如下:[random.random() for i in range(100000)]。你如何證明自己的答案是正確的。

def f1(lIn):
    l1 = sorted(lIn)
    l2 = [i for i in l1 if i<0.5]
    return [i*i for i in l2]

def f2(lIn):
    l1 = [i for i in lIn if i<0.5]
    l2 = sorted(l1)
    return [i*i for i in l2]

def f3(lIn):
    l1 = [i*i for i in lIn]
    l2 = sorted(l1)
    return [i for i in l1 if i<(0.5*0.5)]

‘‘‘
先篩選肯定用時最短f2用時最短,f3最後才篩選用時最長(這點不太準確,算是猜的),執行效率的順序是f2>f1>f3
f1和f3的效率需要準確的計算才能確定結果
‘‘‘
import random
import cProfile
lIn = [random.random() for i in range(100000)]
cProfile.run(‘f1(lIn)‘)# 7 function calls in 0.041 seconds
cProfile.run(‘f2(lIn)‘)# 7 function calls in 0.022 seconds
cProfile.run(‘f3(lIn)‘)# 7 function calls in 0.047 seconds

<每日一題>題目19:簡單的程序執行效率面試題