2011-10-31 53 views

回答

6
def countPositive(nums): 
    return len(filter(lambda x: x > 0, nums)) 

某些timeit結果(上一個新的MacBook Air瓦特/ 1.8 I7,4場演出,以及CPython的2.7):

filter + len

$ python -m timeit "l = [-1, 0, 1] * 100; len(filter(lambda x: x > 0, l))" 
    10000 loops, best of 3: 49.9 usec per loop 

$ python -m timeit "l = [-1, 0, 1] * 1000; len(filter(lambda x: x > 0, l))"                 
1000 loops, best of 3: 476 usec per loop 

$ python -m timeit "l = [-1, 0, 1] * 10000; len(filter(lambda x: x > 0, l))" 
100 loops, best of 3: 4.86 msec per loop 

sum(由hochl推薦) :

$ python -m timeit "l = [1, 2, 3] * 100; sum(1 for x in l if x > 0)" 
10000 loops, best of 3: 35.1 usec per loop 

$ python -m timeit "l = [1, 2, 3] * 1000; sum(1 for x in l if x > 0)" 
1000 loops, best of 3: 336 usec per loop 

$ python -m timeit "l = [1, 2, 3] * 10000; sum(1 for x in l if x > 0)" 
100 loops, best of 3: 3.4 msec per loop 

所以sum版本稍快,但我認爲len + filter更具可讀性。

+0

哦,夥計,我非常親密。謝謝! – helloimbarbara

+1

這兩個測試中的列表是不同的,[-1,0,1]與[1,2,3] – Federico

8
def countPositive(nums): 
     return sum(1 for x in nums if x > 0) 
+0

的確我們有相同的想法;-)我一開始沒有注意到你的,我會刪除我的併發送一個upvote你的方式。 –

+0

嘿,爲什麼刪除你的......都是有效的。我也贊成你的:-) – hochl

+0

非常感謝,但善良知道我已經有足夠的代表了,國際海事組織沒有太多的意見有兩個單獨的答案,它們說完全相同的事情:-P –

1
greaterThanZero = 0 
    for i in array: 
     if i > 0: 
      greaterThanZero += 1 

    return greaterThanZero 
+1

'爲我在範圍array.length:'?你的意思是'我在陣列中'? – glglgl

+0

這正是我的意思。謝謝。 – SetSlapShot

0

你可以這樣做:

def countPositive(array): 
    count=0 
    for i in array: 
    if i>0: 
     count = count +1 
    return count 
+0

爲什麼是負面投票?也許他不想使用最複雜的功能,特別是如果他提出這樣的問題! – lc2817

+0

我沒有倒下任何東西,其他人也沒有倒下。我不是他,我是她。 – helloimbarbara

+0

好的,對不起 – lc2817

0

奇怪的是,名單理解是最快的:

$ python -m timeit "l = [-1, 0, 1] * 10000; len([n for n in l if n > 0])" 
1000 loops, best of 3: 1.1 msec per loop 

使用金額:(慢)

$ python -m timeit "l = [-1, 0, 1] * 10000; sum(1 for x in l if x > 0)" 
1000 loops, best of 3: 1.3 msec per loop 

使用過濾器:(最慢)

$ python -m timeit "l = [-1, 0, 1] * 10000; len(filter(lambda x: x > 0, l))" 
100 loops, best of 3: 2.89 msec per loop 
0
reduce(lambda x,y: x+int(y>0),[1, 2, 1, 4,5],0) 
0

這個工程太:

function countMoreThanZero(a): 

    for i in a: 

     if i > 0: 

      sum += 1 

    return sum 
0

如果你不想使用lambda

from operator import lt 
from functools import partial 

def count_positive(nums): 
    return len(filter(partial(lt, 0), nums)) 

應該是更快,因爲它避免了lambda。

相關問題