用Python编写一个函数,返回数组中大于零的数字计数

用Python编写一个函数,返回数组中大于零的数字计数,python,Python,例如,假设我们调用函数countPositive([1,2,3]),它将返回一个3。或者如果我们有数组[-1,0,1],有一个正数,那么函数将返回1。等等,等等 def countPositive(nums): return len(filter(lambda x: x > 0, nums)) 一些timeit结果(在新的macbook air上,配备1.8 i7、4 gigs和cpython 2.7): 过滤器+len: $ python -m timeit "l = [-1,

例如,假设我们调用函数countPositive([1,2,3]),它将返回一个3。或者如果我们有数组[-1,0,1],有一个正数,那么函数将返回1。等等,等等

def countPositive(nums):
    return len(filter(lambda x: x > 0, nums))
一些timeit结果(在新的macbook air上,配备1.8 i7、4 gigs和cpython 2.7):

过滤器
+
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
(推荐人):

因此,
sum
版本稍微快一点,但我认为
len
+
过滤器
更具可读性

def countPositive(nums):
        return sum(1 for x in nums if x > 0)
一些timeit结果(在新的macbook air上,配备1.8 i7、4 gigs和cpython 2.7):

过滤器
+
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
(推荐人):

因此,
sum
版本稍微快一点,但我认为
len
+
过滤器更具可读性。

您可以这样做:

def countPositive(nums):
        return sum(1 for x in nums if x > 0)
def countPositive(array):
  count=0
  for i in array: 
    if i>0: 
      count = count +1
  return count
您可以这样做:

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

奇怪的是,列表理解速度最快:

$ 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
使用sum:(较慢)

使用过滤器:(最慢)


奇怪的是,列表理解速度最快:

$ 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
使用sum:(较慢)

使用过滤器:(最慢)

这也有效:

function countMoreThanZero(a):

    for i in a:

        if i > 0:

            sum += 1

    return sum
这也有效:

function countMoreThanZero(a):

    for i in a:

        if i > 0:

            sum += 1

    return sum

如果你不想用lambda

from operator import lt
from functools import partial

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

应该更快,因为它避免了lambda。

如果您不想使用lambda

from operator import lt
from functools import partial

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


应该更快,因为它避免了lambda。

事实上,我们有相同的想法;-)一开始我没有注意到你的,我会删除我的,然后按你的方式向上投一票。嘿,为什么要删除你的。。。两者都是有效的。我也会支持你的建议:-)非常感谢,但天知道我已经有足够的代表了,而且我认为有两个完全相同的答案没有多大意义:-请注意,这可以写成
sum(x>0代表x,单位为nums)
。Python的
bool
s实际上只是整数1和0,具有更好的字符串表示形式@helloimbarbara:这是一个完全不同的问题,所以你应该(如果你真的不能自己解决的话)单独问它。@delnan:好主意。。。但是当你读到这样的代码时就不那么明显了。事实上,我们有相同的想法;-)一开始我没有注意到你的,我会删除我的,然后按你的方式向上投一票。嘿,为什么要删除你的。。。两者都是有效的。我也会支持你的建议:-)非常感谢,但天知道我已经有足够的代表了,而且我认为有两个完全相同的答案没有多大意义:-请注意,这可以写成
sum(x>0代表x,单位为nums)
。Python的
bool
s实际上只是整数1和0,具有更好的字符串表示形式@helloimbarbara:这是一个完全不同的问题,所以你应该(如果你真的不能自己解决的话)单独问它。@delnan:好主意。。。但当您阅读此类代码时,就不那么明显了。
用于范围内数组中的i。长度:
?你是说数组中的i
?这正是我的意思。谢谢。
用于范围内数组中的i。长度:
?你是说数组中的i
?这正是我的意思。谢谢,为什么投反对票?也许他甚至不想使用最复杂的功能,尤其是如果他问这样的问题!我没有投任何反对票,其他人投了。我不是男,我是女。为什么投反对票?也许他甚至不想使用最复杂的功能,尤其是如果他问这样的问题!我没有投任何反对票,其他人投了。我不是他,我是她。两个测试中的列表不同,[-1,0,1]对[1,2,3]两个测试中的列表不同,[-1,0,1]对[1,2,3]这是一个非常简单的问题。你可以通过谷歌获得订单!这是一个非常简单的问题。你可以通过谷歌获得订单!