用Python编写一个函数,返回数组中大于零的数字计数
例如,假设我们调用函数countPositive([1,2,3]),它将返回一个3。或者如果我们有数组[-1,0,1],有一个正数,那么函数将返回1。等等,等等用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,
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]这是一个非常简单的问题。你可以通过谷歌获得订单!这是一个非常简单的问题。你可以通过谷歌获得订单!